首页 > 解决方案 > 是否有必要使 pthread_mutex_t 变量易失?

问题描述

在java中,我们通常将锁变量设为final,这样它就只有一个副本存在(虽然我记得读过,即使是静态变量也可以复制到两个方法的调用堆栈中!)

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

我不确定这个变量是否是重复证明(java中静态变量的问题,它可能会或可能不会被复制到两个方法的调用堆栈中)。因为如果它们被编译器复制,那么我担心锁定可能不起作用。那么我们是否需要更激进的访问修饰符,比如“volatile”来让它真正的单一化?

标签: cmultithreadingsynchronizationmutex

解决方案


不仅没有必要;这是不允许的。函数的参数pthread_mutex_...具有类型pthread_mutex_t *并且需要指向pthread_mutex_t对象的有效指针。指向的指针volatile pthread_mutex_t不会像指向的指针那样自动转换const pthread_mutex_t,因为它在需要不合格的地方不可用。你可以通过强制转换来转换它,但是你只是有违反函数契约的未定义行为。


推荐阅读