C ++ 11中的自然对齐+ volatile = atomic?

时间:2018-05-22 12:50:20

标签: c++11

1)以下是自然对齐指针的声明:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>(Same… with more texts!)</p>
<div class="cc-selector">
  <label>
    <input type="radio" name="radAnswer" value="vhappy" />
  <label for="vhappy">Very happy</label>
  </label>
  <label>
    <input type="radio" name="radAnswer" value="happy" />
  <label for="happy">Happy</label>
  </label>
  <label>
    <input type="radio" name="radAnswer" value="sad" />
  <label for="sad">Sad</label>
  </label>
  <label>
    <input type="radio" name="radAnswer" value="vsad" />
  <label for="vsad">Very sad</label>
  </label>
</div>
<p>(… and again!)</p>
<div class="cc-selector">
  <label>
    <input type="radio" name="radAnswer" value="vhappy" />
  <label for="vhappy">Very happy</label>
  </label>
  <label>
    <input type="radio" name="radAnswer" value="happy" />
  <label for="happy">Happy</label>
  </label>
  <label>
    <input type="radio" name="radAnswer" value="sad" />
  <label for="sad">Sad</label>
  </label>
  <label>
    <input type="radio" name="radAnswer" value="vsad" />
  <label for="vsad">Very sad</label>
  </label>
</div>

相当于

alignas(sizeof(void *)) volatile void * p;

在C ++ 11中?

2)更准确地说,假设这种类型的指针与C ++ 11中的std :: atomic一样工作是否正确?

1 个答案:

答案 0 :(得分:1)

不,volatile不保证该位置将以原子方式写入或读取,只是编译器无法优化多次读写。

在某些体系结构中,如果正确对齐,处理器将以原子方式读取或写入,但这不是通用的,甚至不能通过一系列处理器来保证。在可能的情况下,原子的内部实现将利用架构特性和原子指令修饰符,那么为什么 使用原子,如果你的意思是原子?