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