pthread 互斥对象必须是易失性的吗?

Tur*_*gut 0 c++ multithreading pthreads

在学习了常规线程之后,我正在学习 pthreads。通常,当我们使用布尔线程对象时,我们将其声明为易失性对象,如下所示volatile bool thread_lock;:我们是否也需要在 pthread 对象上执行此操作,特别是在pthread_mutex_t需要时或它自己处理它?

我查看了该pthread_mutex_t声明,发现它没有 易失性声明。

应该是volatile pthread_mutex_t my_obj;还是pthread_mutex_t my_obj;

Use*_*ess 6

通常,当我们使用布尔线程对象时,我们将其声明为易失性对象,如下所示:volatile bool thread_lock;

这种用法volatile从来都不是标准的。一些平台将这些语义添加volatile为令人遗憾且令人困惑的扩展。

另一个答案中有更多乏味的细节,但简短的版本是您永远不应该将其用于volatile同步。这既不是必要的,也不是充分的。

POSIX 线程库会为您处理一切 - 如果您需要编写volatile使其工作,它会在其联机帮助页和文档中说明。事实并非如此,因为你不这样做。

更方便的是,C++ 自 2011 年以来就有了自己的标准并发支持,并且已经完全成熟。