【发布时间】:2015-06-10 05:18:53
【问题描述】:
对于进程间程序,当一个进程获得互斥锁并且该进程被用户杀死时,该锁永远不会被解锁,而另一个正在等待获得相同锁的进程只会继续等待。
我进行了广泛的搜索,发现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<<"Beginning\n";
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 locking\n";
//err = pthread_mutexattr_destroy(&attr); if (err) return err;
err = pthread_mutex_lock(&shm_mutex); if (err) return err;
std::cout<<"locked\n";
sleep(30);
err = pthread_mutex_unlock(&shm_mutex); if (err) return err;
std::cout<<"Unlocked\n";
err = pthread_mutex_destroy(&shm_mutex); if (err) return err;
return 0;
}
【问题讨论】:
标签: c++ pthreads shared-memory interprocess