我有一些需要通过POSIX共享内存进行通信的进程。
存储在此共享内存中的结构如下所示:
struct shared_message{
enum MESSAGE_TYPE type;
[fields]
uint8_t error;
};
显然我需要同步对共享内存的访问。但是,如果一个客户端出现故障或收到SIGINT / SIGTERM信号,我想通过将shared_message->错误设置为1来通知其他客户端此错误。 问题是,我不能以同步方式真正做到这一点,因为我会在收到终端信号后及时阻止进程关闭。
在不同步访问的情况下将错误变量设置为1是否安全?我并不关心“丢失更新”,因为我对此标志的唯一做法是将其从零设置为1,但我担心写入此标志可能会以某种方式干扰附近的字段,例如因为写入一个完整的DWORD,而不只是这一个字节。