首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么线程安全给变量归零

2013-08-09 
如何线程安全给变量归零InterlockedIncrement 可以安全地加InterlockedDecrement 可以安全地减变量类型是

如何线程安全给变量归零
InterlockedIncrement 可以安全地加
InterlockedDecrement 可以安全地减

变量类型是 LONG

怎么安全地归零呢?我注意到了函数 InterlockedXor,可以用疑惑的办法清零
但是这个函数没有 LONG 类型的参数,而是ULONGLONG
[解决办法]
InterlockedExchange(a,b)能以原子操作的方式交换俩个参数a, b并返回a以前的值。
让其中一个为0就可以。
[解决办法]
不需要读值的纯赋值不是本来就原子操作么
[解决办法]
临界区或互斥量
[解决办法]
最安全的就是读写都加锁。
至少在刚开始编写程序的时候应该这么做。
等程序测试没问题,再逐步提高效率。有的地方可以不锁。

举例:判队列空是读操作,但有时也必须加锁。空的没问题,万一不空,只有1个任务,而2个线程都过了判断不空,去取数据,就会发生1个取到了,1个傻了,这时候再判空还不是多次一举。不如开始判断是否空的时候就加锁,能保证不空到时候一定能取到数据。
[解决办法]
可以在修改变量值的地方加 EnterCriticalSection / LeaveCriticalSection,当然这个操作没有Interlocked系列函数快

热点排行