std::atomic bool or Normal global bool 在单线程中好用吗?

std::atomic bool or Normal global bool is good in single thread?

我在下面的线程(bool allow)中有全局变量,它限制客户端等待(通过分配 allow=false)直到它完成。完成后允许=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 作为全局变量还是像上面那样好

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 然而,保证是无锁的。有关更多信息,请参阅 the cppreference documentation

如果您有一个线程访问该布尔值,那么根本没有任何同步意义。