我有以下课程
class Thread
{
int m_state;
Mutex m;
CondVar v;
Thread(): m_state( 0 ) {}
write()
{
// Get mutex m
// m_state = 1;
// signal v
};
read()
{
// Get mutex m
while( m_state == 0 )
{
wait v;
};
};
};
read()和write()可以在不同的线程上调用。
在这种情况下,我们是否必须生成m_state或volatile,或者编译器确保阻止优化(例如从内存读取m_state以注册和在寄存器上旋转)?
答案 0 :(得分:0)
Volatile在这里没有帮助,因为有两个问题:
因此,您必须至少使用内存屏障标记共享变量,以防止重新排序。 Mutex适合这里(不是最好的表现,但它会起作用)。此外,您可以尝试任何可用的读写器锁,因为它应该适合您的语义100%。