在我的应用程序中,我有几个线程访问和修改同一个char数组。
volatile unsigned char *volatile key[6] = { 0xD4 ,0x32 ,0xF8 ,0x0A ,0x10 ,0xE5 };
volatile unsigned char *volatile
是否保证:
可见性(所有其他线程将立即看到字符的更改(
原子性(任何更改都将由一个线程执行,不会中断(
简短回答:
无
长答案:
来自GNU C手册:
volatile告诉编译器变量是显式可变的,并且不应该优化对变量的看似无用的访问(例如,通过指针(。您可以使用volatile变量来存储通过回调函数或信号处理程序更新的数据。序列点和信号传递。
这并不意味着具有volatile
关键字的变量必然将满足您要求的条件。
如果您想要一个同时具有可见性和原子性的数组,您应该使用互斥,具体情况当然取决于您的目标。