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
对,
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |