gpt4 book ai didi

c++ - std::atomic bool 或 Normal global bool 在单线程中好用吗?

转载 作者:行者123 更新时间:2023-11-30 01:39:46 25 4
gpt4 key购买 nike

我在下面的线程(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
}

最佳答案

如果对 bool 值的所有访问都受互斥锁保护,那么这两种方式都没有关系(就正确性而言)。使用 atomic<>或者不要。您的代码的正确性不会受到影响。

性能可能会受到影响,除了您正在锁定对已经具有 mutex 的内容的访问之外。保护它,std::atomic<>有可能使用mutex在引擎盖下。 std::atomic_flag但是,保证是无锁的。参见 the cppreference documentation更多。

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

关于c++ - std::atomic bool 或 Normal global bool 在单线程中好用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com