作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类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;
};
请注意,任何涉及 static
的解决方案都将只允许调用一次 MyClass::B
,即使跨越多个 MyClass
实例,也可能或对你来说可能没有意义;假设它没有有意义,这种方法反而允许一次调用 MyClass::B
per MyClass
实例.
关于c++ - 嵌套函数的线程安全和唯一执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324908/
我是一名优秀的程序员,十分优秀!