![]() |
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
对,
|
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 5 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 5 月前 |