PThread健壮互斥不工作
PThread robust mutex not working
对于进程间程序,当一个进程获得互斥锁并且该进程被用户杀死时,该锁永远不会被解锁,而等待获得相同锁的另一个进程只是继续等待。
我做了广泛的搜索,发现pthreads
有robust lock
的概念来解决这个问题,但是在尝试它时,进程之间的普通锁定本身不起作用。对于下面的代码,我打开了两个终端,并在这两个终端中运行了可执行文件。在这两种情况下,程序都立即获得锁。预期的行为是,我运行的第一个可执行程序将获得锁,第二个可执行程序将等待30秒。但这不会发生。我执行错了吗?(编译用-lpthread
)
#include <pthread.h>
#include<iostream>
pthread_mutex_t shm_mutex;
int main(void)
{
int err;
pthread_mutexattr_t mattr;
std::cout<<"Beginningn";
err = pthread_mutexattr_init(&mattr); if (err) return err;
err = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); if (err) return err;
err = pthread_mutex_init(&shm_mutex, &mattr); if (err) return err;
err = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST);
std::cout<<"Before lockingn";
//err = pthread_mutexattr_destroy(&attr); if (err) return err;
err = pthread_mutex_lock(&shm_mutex); if (err) return err;
std::cout<<"lockedn";
sleep(30);
err = pthread_mutex_unlock(&shm_mutex); if (err) return err;
std::cout<<"Unlockedn";
err = pthread_mutex_destroy(&shm_mutex); if (err) return err;
return 0;
}
你有两个相关的问题:
-
第二个进程在互斥锁上调用
pthread_mutex_init
,这破坏了它,因为它已经被创建并且被第一个进程锁定 -
您实际上没有通过将互斥锁放入共享内存来共享互斥锁。您让每个进程在自己的地址空间中创建自己的互斥锁。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- pthread只有在线程数量较少时才可以正常工作
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- 将工作与固定数量的螺纹之间的工作和pthread之间的分配
- 如何在完成工作后停止所有pthread
- pthread中的线程在一些迭代之后停止工作
- 为什么在pthread-win32中主线程比工作线程慢
- pthread程序导致Linux机器出现分段错误.在Cygwin64上工作良好
- PThread健壮互斥不工作