std ::原子布尔或普通全局布尔是好的单线程?
我有一个全局变量在下面的线程(布尔允许)限制客户端等待(通过分配允许= false),直到它完成。 完成后allow = true
bool allow =true;
static void * mythread(void *arg)
{
/* here is Lock mutex code */
allow =false;(**non atomic**)
system(command);
allow =true;
/* here is Unlock Mutex code */
}
if(allow)
{
// validate thread output
}
else
{
// wait
}
我担心的是我应该使用std :: atomic作为全局变量还是其作为bove
std::atomic<bool>allow(true);
static void * mythread(void *arg)
{
/* here is Lock mutex code */
allow.store(false, std::memory_order_seq_cst);
system(command);
allow.store(true, std::memory_order_seq_cst);
/* here is Unlock Mutex code */
}
if(allow)
{
// validate thread output
}
else
{
// wait
}
如果所有对布尔值的访问都受到互斥体的保护,那么无论哪种方式都无关紧要(就正确性而言)。 使用atomic<>
或不要。 你的代码的正确性不会受到影响。
但是性能可能会受到影响,除了您正在锁定对已经有一个mutex
保护的事物之外, std::atomic<>
有可能在引擎盖下使用mutex
。 然而, std::atomic_flag
保证是无锁的。 有关更多信息,请参阅cppreference文档。
如果你有一个单线程访问该布尔值,那么根本没有任何同步。
链接地址: http://www.djcxy.com/p/30805.html上一篇: std::atomic bool or Normal global bool is good in single thread?
下一篇: Is it ok to use atomic<bool> for multiple thread synchronize than event