gpt4 book ai didi

c++ - PThread 强大的互斥锁不起作用

转载 作者:行者123 更新时间:2023-11-30 03:52:19 26 4
gpt4 key购买 nike

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

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

最佳答案

你有两个相关的问题:

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

  2. 您实际上并没有共享 互斥锁,而是将它放在共享内存中。您让每个进程在其自己的地址空间中创建自己的互斥量。

关于c++ - PThread 强大的互斥锁不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30747637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com