是否有必要使pthread_mutex_t变量易失?

Ace*_*Ace 2 c multithreading synchronization mutex

在Java中,我们通常使lock变量为final静态,以便仅存在一个副本(尽管我记得读过,即使static变量也可以复制到两个方法的调用堆栈中!)

但是我正在处理C和数据同步。我已经声明了一个pthread_mutex_t变量,在该变量上N个线程将被锁定以访问公共资源。

我不确定的是此变量是否可重复验证(java中的静态变量的问题可能会或可能不会被复制到两个方法的调用堆栈中)。因为如果它们被编译器复制,那么我担心锁定可能无法正常工作。那么,我们是否需要更多的激进访问修饰符(例如“ volatile”)使其真正地是单数呢?

R..*_*R.. 5

不仅没有必要;这是不允许的pthread_mutex_...function 的参数具有类型,pthread_mutex_t *并且需要指向pthread_mutex_t对象的有效指针。指向的指针volatile pthread_mutex_t不会像指向的指针一样自动进行转换const pthread_mutex_t,因为在需要使用不合格的指针时,该指针不可用。您可以通过强制转换将其转换,但是您只有违反了功能约定的未定义行为。