У меня есть следующий код для межпроцессного взаимодействия через разделяемую память. Один процесс записывает в журнал, а другой читает его. Один из способов - использовать семафоры, но здесь я использую атомный флаг (log_flag) типа atomic_t, который находится внутри общей памяти. Журнал ( log_datastrong > ) также доступен.
Теперь вопрос в том, будет ли это работать для архитектуры 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;
}