我应该使用原子还是易失性指针

Should I use atomic or volatile for pointers?

本文关键字:易失性 指针 我应该      更新时间:2023-10-16

有两个线程(t1 和 t2)固定到两个不同的内核。它们都有一个共享变量,该变量是指向某个类类型的原始指针。T1 仅读取指针,T2 读取/写入指针。我应该将指针声明为易失性还是原子或两者兼而有之?

当 t2 更新此指针时,如果 t1 读取旧的或新的指针是可以的,但它不应该读取任何中间值,因为它会导致 seg 错误。

>volatile可用于告诉编译器不要优化对变量使用的内存的重复访问。显然,如果另一个线程可以更新变量,您将需要这样做。它被称为"几乎无用"的原因是,在很多情况下,这不足以保证正确的多线程行为,您需要查看内存围栏和原子基元操作。

在某些处理器体系结构(如英特尔)上,对整数或指针的读取或写入将是原子的,只要它正确对齐内存。例如,请参阅英特尔链接 http://software.intel.com/en-us/forums/showpost.php?p=31711 不断变化,因此我无法找到最终资源。

volatile对于多线程是无用的,所以这个选项被排除在外。你确实只需要一个原子变量。