c-易失性数组上的并发更改是原子的,并且对所有线程都可见吗



在我的应用程序中,我有几个线程访问和修改同一个char数组。

volatile unsigned char *volatile key[6] = { 0xD4 ,0x32 ,0xF8 ,0x0A ,0x10 ,0xE5 };

volatile unsigned char *volatile是否保证:

  1. 可见性(所有其他线程将立即看到字符的更改(

  2. 原子性(任何更改都将由一个线程执行,不会中断(

简短回答:

长答案:

来自GNU C手册:

volatile告诉编译器变量是显式可变的,并且不应该优化对变量的看似无用的访问(例如,通过指针(。您可以使用volatile变量来存储通过回调函数或信号处理程序更新的数据。序列点和信号传递。

这并不意味着具有volatile关键字的变量必然将满足您要求的条件。

如果您想要一个同时具有可见性原子性的数组,您应该使用互斥,具体情况当然取决于您的目标。

相关内容

  • 没有找到相关文章

最新更新