PThread健壮互斥不工作

PThread robust mutex not working

本文关键字:工作 PThread      更新时间:2023-10-16

对于进程间程序,当一个进程获得互斥锁并且该进程被用户杀死时,该锁永远不会被解锁,而等待获得相同锁的另一个进程只是继续等待。

我做了广泛的搜索,发现pthreadsrobust 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;
}   

你有两个相关的问题:

  1. 第二个进程在互斥锁上调用pthread_mutex_init,这破坏了它,因为它已经被创建并且被第一个进程锁定

  2. 您实际上没有通过将互斥锁放入共享内存来共享互斥锁。您让每个进程在自己的地址空间中创建自己的互斥锁。