Когда хотите что-либо запушить в основной репозиторий, можете просмотреть hg outgoing, заимпортировать всё это в MQ (если пушили куда-то не в основной репозиторий, то вам просто так заимпортировать не удастся и нужно будет сменить фазу через hg phase), отредактировать патчи как нравится, преобразовать в коммиты и запушить в основной репозиторий.
А зачем отдельный каталог? rsnapshot поддерживает запуск скриптов и бекапит все файлы, которые эти скрипты создают. См. 'backup_script' в rsnapshot.conf.
Оно того может не стоить потому что узкое место в программе может быть совершенно другое.
Да, я и имел ввиду сделать полностью свою хеш-таблицу в ByteBuffer. Тогда получаете полный контроль над всем происходящим и уходите от лишних переходов по ссылкам.
Начальный вопрос не имеет смысла, если код некорректный. Это раз. Я не утверждаю что ваш код точно некорректный, но есть основания сомневаться в его корректности.
А чтобы сделать кроссплатформенно используйте возможности современных стандартов.
Да ну ладно?! Вам не нужен bool? Не нужен static assert? Не нужна удобная инициализация структур? Не нужно понимать что значит inline? Не нужно расставлять _Noreturn для оптимизации? Не нужно контролировать выравнивание?
Это хороший учебник как для первого языка программирования, но если изучать Си зная другой императивный язык «с фигурными скобками», то эта книга бывает местами скучной.
Там слишком многого нет из современного Си. Это не особо важно как для первого знакомства (хотя такие вещи как stdbool.h, inline и _Static_assert лучше бы знать сразу), но важно для промышленного программирования. Designated initializers, variable length arrays, stdbool.h, restrict, inline (нет, там не так всё просто как вы думаете) — и это только C99. C11: модель памяти, atomics, потоки, _Static_assert, _Noreturn, _Alignas, alignof.
Я разбираюсь в этой теме ровно настолько, что только понимаю, что просто так, без понимания математики, лежащей в основе, обычному программисту в реализацию ГПСЧ лезть нельзя. Поэтому предлагаю другим указать на хорошие материалы по теме.
Обучение в этой области следует начать с чтения сначала общей теории по теме, затем с чтения важных старых и современных научных статей, и только потом можно начать думать о программировании.
Я не знаю полностью ваш процесс, поэтому конкретный совет вам дать не могу. Из своего опыта могу сказать, что даже в проекте с несколькими миллионами строк и десятками разработчиков *конфликты* — очень редкая ситуация. (И это не тот случай, когда определённый файл может править только один человек — владение кодом общее.) Именно поэтому я считаю что у вас что-то не так, если вы испытываете необходимость в блокировании для избежания конфликтов.
Разработчик может работать на многих проектах — если их настолько много, что он может и *забыть* что где и как, то это *проблема*.
Проблема в том, что тестовой должна быть простая задача, минут на 40 максимум. Кроме того, у задачи должна быть простая и понятная формулировка, чтобы человек с любым бекграундом мог её понять.
Когерентность кешей. Да, а если её нет? ОК, таких машин мало, согласен.
> А *volatile* для таких совместно используемых данных действительно необходим
Он не даёт гарантий того, что данные будут считаны из памяти. Он даёт гарантию того, что в машинном коде будет load, а как он будет reorder'иться или будет ли обслужен из кеша — это уже как процессору захочется.
Или ещё один коммит сверху. Чудес нет.