【发布时间】:2016-11-21 00:28:53
【问题描述】:
我正在创建一个可供某些线程访问的缓冲区。
struct buffer {
struct items[32];
int numItems = 0; /*will keep track of number of items in the buffer
}; and will be updated by threads when accessed.
We'll include mutex locking*/
我应该将buffer 声明为易失性还是使numItems 易失性?
我在想什么:我的理解是 volatile 应该用于防止编译器优化线程对数据的原子访问之间的操作。如果我对此有误解,请纠正我
谢谢!
【问题讨论】:
-
不要尝试使用
volatile来保证线程安全。 -
不要为 volatile 烦恼;如果您的目标是正确的多线程程序,那将毫无用处。您将需要更强大的 juju(例如锁/互斥体/原子)。 stackoverflow.com/questions/2484980/…
-
@JonathanLeffler OP 关心的不是线程安全,而是线程内部使用的变量的不正确优化(回调函数)。
标签: c multithreading pthreads structure volatile