0
|
Brian T Hannan · 技术社区 · 15 年前 |
![]() |
1
0
InterlockedExchangeAdd用于将值作为原子操作添加到整数,这意味着您不必使用临界段。如果某个线程抛出异常,这也消除了死锁的风险——您需要确保不保留任何类型的锁,因为这会阻止其他线程获取该锁。 对于您的场景,您肯定可以使用联锁…-函数,但我会使用事件(CreateEvent、SetEvent、WaitForSingleObject),可能是因为我经常发现自己需要等待多个对象(在您的场景中,您可以等待零秒)。 Upd:对变量使用volatile可能有效,但不建议使用volatile,请参阅: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2016.html 和 http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags/c%2B%2B0x 如果你想随身携带,看看 boost::thread . |
![]() |
2
3
InterlocatedXXX系列函数使用Intel CPU的原子3操作数命令(XADD和CMPXCNG)。因此,它们比关键部分便宜得多。线程安全分配所需的是InterlockedCompareeExchange()。 UPD:将变量标记为volatile。 |
![]() |
3
0
您的“竞争条件”是//more代码的各个元素可以以不同的顺序执行。您的变量对此没有帮助。您的目标是让它们以确定的顺序执行吗?如果是,则需要一个条件变量在一个线程上等待,并在另一个线程中设置。如果您只是不希望它们同时执行,则可以使用关键部分。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |