C ++ 98中有哪些内存障碍?

时间:2019-06-10 11:11:30

标签: multithreading arm volatile c++98 mbed

我偶然发现了这个线程:Why is volatile not considered useful in multithreaded C or C++ programming?

并在投票最高的答案中偶然发现以下内容...

  

但是,内存屏障还可以确保在达到该屏障时执行所有挂起的读/写操作,因此它可以有效地为我们提供我们所需的一切,而无需挥发。我们可以完全删除volatile限定符。

     

自C ++ 11起,原子变量(std :: atomic)为我们提供了所有相关保证。

我正在使用支持C ++ 98的平台,那么C ++ 98可以使用哪些内存屏障?我曾尝试将互斥锁用于mbed,但我无法从逻辑上确定互斥锁是否是保护(例如,同时发生在两个同时线程中的串行写入和读取)的足够方法,因为我没有足够的信心关于线程安全。

在c ++ 98中访问简单共享资源的简便方法是什么?

2 个答案:

答案 0 :(得分:2)

C ++ 98标准是单线程的(线程不存在),因此该标准中没有。但是,您将拥有特定于OS /平台的内存障碍。

答案 1 :(得分:1)

  

但是我无法从逻辑上确定互斥量是否足以   例如,保护两次发生的串行写入和读取   并发线程

如果互斥锁代码不能保证,则根据定义它们已损坏。我们将不得不查看该代码以检查其是否正确完成。