我偶然发现了这个线程:Why is volatile not considered useful in multithreaded C or C++ programming?
并在投票最高的答案中偶然发现以下内容...
但是,内存屏障还可以确保在达到该屏障时执行所有挂起的读/写操作,因此它可以有效地为我们提供我们所需的一切,而无需挥发。我们可以完全删除volatile限定符。
自C ++ 11起,原子变量(std :: atomic)为我们提供了所有相关保证。
我正在使用支持C ++ 98的平台,那么C ++ 98可以使用哪些内存屏障?我曾尝试将互斥锁用于mbed,但我无法从逻辑上确定互斥锁是否是保护(例如,同时发生在两个同时线程中的串行写入和读取)的足够方法,因为我没有足够的信心关于线程安全。
在c ++ 98中访问简单共享资源的简便方法是什么?
答案 0 :(得分:2)
C ++ 98标准是单线程的(线程不存在),因此该标准中没有。但是,您将拥有特定于OS /平台的内存障碍。
答案 1 :(得分:1)
但是我无法从逻辑上确定互斥量是否足以 例如,保护两次发生的串行写入和读取 并发线程
如果互斥锁代码不能保证,则根据定义它们已损坏。我们将不得不查看该代码以检查其是否正确完成。