c - 是否有必要使 pthread_mutex_t 变量易失?
问题描述
在java中,我们通常将锁变量设为final,这样它就只有一个副本存在(虽然我记得读过,即使是静态变量也可以复制到两个方法的调用堆栈中!)
但我正在处理 C 和数据同步。我已经声明了一个 pthread_mutex_t 变量,N 个线程将在该变量上锁定以访问公共资源。
我不确定这个变量是否是重复证明(java中静态变量的问题,它可能会或可能不会被复制到两个方法的调用堆栈中)。因为如果它们被编译器复制,那么我担心锁定可能不起作用。那么我们是否需要更激进的访问修饰符,比如“volatile”来让它真正的单一化?
解决方案
不仅没有必要;这是不允许的。函数的参数pthread_mutex_...
具有类型pthread_mutex_t *
并且需要指向pthread_mutex_t
对象的有效指针。指向的指针volatile pthread_mutex_t
不会像指向的指针那样自动转换const pthread_mutex_t
,因为它在需要不合格的地方不可用。你可以通过强制转换来转换它,但是你只是有违反函数契约的未定义行为。
推荐阅读
- php - 使用特定日期和时间获取未来的 unix 时间戳?
- sql - 在 SAS 中使用 PROC SQL 查询财务余额?
- python - 使用 CreateView 类创建 success_url 后出错
- android - 如何在 Flutter 中使用底部标签栏执行多个 webview?
- python - 正确导入具有日期格式的列
- c++ - Stroustrup 的《编程原理与实践》一书中的这个代码示例是否有错误?
- python - 价值。执行字符串剥离并尝试在python中将对象列转换为整数时出错
- swift - 如何将复杂的模型结构设置为 FireStore?
- javascript - 为什么我的 Hapi 后端不提供具有动态文件名的静态文件?
- html - 进入下一页时嵌入的视频继续播放