Я использовал RCUNIT, чтобы сделать некоторое поблочное тестирование на встроенный код на ПК прежде, чем протестировать на цели. Хорошая абстракция аппаратного интерфейса еще важна, порядок байтов и регистры с отображенной памятью собираются уничтожить Вас.
Самый быстрый способ синхронизации доступа между процессами - использовать мьютексы / семафоры. В этой теме рассказывается, как их использовать для имитации шаблона блокировки чтения-записи: Существует ли глобальная именованная блокировка чтения / записи?
Рассмотрите возможность использования простой базы данных. Вы относительно легко получите всю эту встроенную безопасность.
Я предлагаю использовать ReaderWriterLock. Он разработан для нескольких считывателей, но гарантирует, что только один модуль записи может записывать данные одновременно MSDN .
Я бы посмотрел на что-то вроде Command Pattern для этого. Одновременная запись была бы кошмаром для целостности данных.
По сути, вы используете этот шаблон для постановки ваших команд записи в очередь, чтобы они выполнялись в порядке запроса.
Вы также должны использовать ReaderWriterLock , чтобы гарантировать, что вы можете читать из файла во время записи . Это будет вторая линия защиты за шаблоном команд, чтобы только один поток мог писать в файл в данный момент времени.
Вы также можете попробовать заблокировать. Это просто - «блокировка гарантирует, что один поток не войдет в критическую секцию, в то время как другой поток находится в критической секции кода. Если другой поток попытается ввести заблокированный код, он будет ждать (блокировать), пока объект не будет освобожден».
http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS.71%29.aspx
Я также рекомендовал бы вам поискать примеры наличия нескольких читателей и только одного автора в критическом разделе. Вот небольшая статья с хорошим решением http://arxiv.org/PS_cache /cs/pdf/0303/0303005v1.pdf
В качестве альтернативы вы можете посмотреть на создание копий файла каждый раз, когда он запрашивается, и когда приходит время записывать любые изменения в файл, который вы объединяете с исходным файлом.