У меня есть следующий код для межпроцессного взаимодействия через общую память. Один процесс пишет в журнал, а другой читает из него. Один из способов - использовать семафоры, но здесь я использую атомарный флаг (log_flag) типа atomic_t, который находится внутри общей памяти. Журнал (log_data) также является общим.
Теперь вопрос, будет ли это работать на архитектуре x86 или мне нужны семафоры или мьютексы? Что если я сделаю log_flag неатомарным? Учитывая, что x86 имеет строгую модель памяти и проактивную когерентность кэша, а оптимизация не применяется к указателям, я думаю, это все равно будет работать?
EDIT: Обратите внимание, что у меня многоядерный процессор с 8 ядрами, поэтому у меня нет проблем с занятыми ожиданиями!
// Process 1 calls this function
void write_log( void * data, size_t size )
{
while( *log_flag )
;
memcpy( log_data, data, size );
*log_flag = 1;
}
// Process 2 calls this function
void read_log( void * data, size_t size )
{
while( !( *log_flag ) )
;
memcpy( data, log_data, size );
*log_flag = 0;
}