你好。我正在学习多线程编程,现在我正在尝试理解原子性。在 Anthony Williams 的书中示例中,atomic_flag 结构有 2 个重载方法。
bool test_and_set(memory_order _Order = memory_order_seq_cst) volatile noexcept;
bool test_and_set(memory_order _Order = memory_order_seq_cst) noexcept;
我创建了我的结构并做了同样的重载。她在这里
struct foo {
bool test() volatile noexcept { cout << "volatile"; return true; }
bool test() noexcept { cout << "No volatile"; return true; }
};
在创建对象并调用 test() 方法时,调用时没有歧义。我不明白为什么会这样。你能解释一下吗
在主线程调用 foo::test() 时,会在主函数中调用不带 volatile 关键字的方法。
带有 volatile 限定符的方法也将在使用 volatile 限定符声明的对象上调用。否则,将调用没有 volatile 限定符的方法。