![]() |
1
2
|
![]() |
2
2
|
![]() |
3
1
Volatile既不是必需的,也不是足够的。所以没有理由使用它。这是不够的,因为没有标准规定它将提供线程之间的可见性。这是没有必要的,因为pthreads标准说mutex已经足够了。 更糟糕的是,使用它意味着你是一个不称职的程序员,他试图在你的代码上撒上魔法的灰尘来让它工作。它有点像货物崇拜编程和任何人看代码会推断,你不知道它不是必需的。更糟糕的是,他们可能认为你觉得这已经足够了,他们会怀疑你写的任何其他代码,担心你用“volatile”来隐藏多线程错误,而不是修复它们。 |
![]() |
4
0
我建议使用
我个人会加上
在本例中,对函数(pthread\u mutex\u lock())的调用 副作用 执行环境 . 因此,编译器必须重新读取全局变量,该变量可能已被函数调用更改。
要确定的是,您需要咨询C99的
附件C摘录:
从那以后。 以我的经验来看,现在的编译器已经足够聪明了,即使在积极优化时,也不会对作为全局变量的循环控制变量做任何花哨的事情。 |
![]() |
5
-1
在存在优化的情况下,这里需要Volatile。否则ready的读取可以合法地移出while循环。
|
![]() |
6
-1
对,
|
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 8 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 8 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 8 月前 |
![]() |
András Takács · Python多线程问题 1 年前 |
|
András Takács · Python多线程错误 1 年前 |