问题描述
- 多进程读写long类型值
-
windows下,一个进程不停地写共享内存的一个long类型变量值,另外一个进程不停地
读取该变量值做if判断,这个时候可能该值既不是0也不是1么?
解决方案
基本类型写入的时候应该是原子操作的。所以应该是0或1
解决方案二:
看你写的数是什么,只有0、1?
为了安全读取数,应该做个握手信号,我写,你就别读。等我写完你再读。
解决方案三:
只写0和1,这是在实现自旋锁时遇到的一个问题,加锁时:InterlockedCompareExchange(long变量地址, 1, 0 ),解锁时:*long变量地址 = 0
,
另外一个进程尝试加锁,如果失败,就会做一个if (long变量 != 0 && long变量 != 1) { assert(false); }
时间: 2024-11-08 17:21:22