gpt4 book ai didi

c++ - 嵌套函数的线程安全和唯一执行

转载 作者:行者123 更新时间:2023-11-30 01:10:16 24 4
gpt4 key购买 nike

我有一个类MyClass,它的函数A 被并行执行了很多次。然后,函数 B 应该只执行一次。我的初始设置看起来很简单,但我怀疑它是线程安全的。我怎样才能使它线程安全?我正在使用 C++11。

class MyClass {
public:
void A() {
static bool execute_B = true;
if (execute_B) {
execute_B = false;
B();
}
}
private:
void B() {
std::cout << "only execute this once\n";
}
};

最佳答案

这是 std::atomic_flag 的主要用例:

class MyClass {
public:
void A() {
if (!execute_B_.test_and_set()) {
B();
}
}

private:
void B() {
std::cout << "only execute this once\n";
}

std::atomic_flag execute_B_ = ATOMIC_FLAG_INIT;
};

Online Demo

请注意,任何涉及 static 的解决方案都将只允许调用一次 MyClass::B,即使跨越多个 MyClass 实例,也可能或对你来说可能没有意义;假设它没有有意义,这种方法反而允许一次调用 MyClass::B per MyClass 实例.

关于c++ - 嵌套函数的线程安全和唯一执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324908/

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