我有以下代码通过共享内存进行进程间通信.一个进程写入日志,另一个进程从它读取.一种方法是使用信号量,但是在这里我使用的是原子标志(log_flag),该标志位于共享内存中.日志(log_data)也是共享的.
现在的问题是,这将适用于x86架构,还是需要信号量或互斥体?如果我使log_flag非原子呢?鉴于x86具有严格的内存模型和主动缓存一致性,优化不适用于指针,我认为它仍然可以工作?
编辑:请注意,我有一个具有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; }