gpt4 book ai didi

c++ - 当我对一个已经锁定的 pthread_mutex_t 执行 pthread_mutex_init 时会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:06 24 4
gpt4 key购买 nike

我的互斥量类定义为:-

class Mutex{
static pthread_mutex_t mutex;
public:
Mutex(){
pthread_mutex_init(&mutex, NULL);
while(pthread_mutex_trylock(&mutex)){
sleep(2000);
}
}
virtual ~Mutex(){
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
}
};

我尝试应用互斥来使用此类的函数如下:-

void doSomething(){
Mutex mutex;
// do something
}

这样,当构造函数被调用时,互斥锁被初始化并尝试获取该互斥锁上的锁。当它超出该函数的范围时,它会自动被销毁。

但是如果一个线程锁定了互斥体,另一个线程试图在其上运行pthread_mutex_init,究竟会发生什么?拥有锁的线程会被覆盖吗?

最佳答案

很简单,来自 POSIX.1-2013 :

Attempting to initialize an already initialized mutex results in undefined behavior.

这就是为什么您有另一种初始化互斥锁的方法:

// in your .cpp somewhere
pthread_mutex_t Mutex::mutex = PTHREAD_MUTEX_INITIALIZER;

除此之外,从逻辑上讲,您的类(class)似乎非常有问题。您真的想要为 Mutex 的所有用户提供一个全局锁,无论他们在做什么吗?你应该使用细粒度的锁,否则你会通过 software lockout 人为地限制你自己的可扩展性。 .

关于c++ - 当我对一个已经锁定的 pthread_mutex_t 执行 pthread_mutex_init 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36836243/

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