【发布时间】:2021-12-23 08:06:04
【问题描述】:
您好,我是新手,我想知道我理解错了什么。我有一个程序:
#include <pthread.h>
pthread_mutex_t lock;
pthread_mutexattr_t att;
int main () {
pthread_mutexattr_init (&att);
pthread_mutexattr_settype (&att, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init (&lock, &att);
pthread_mutex_lock (&lock);
pthread_mutex_lock (&lock);
pthread_mutex_unlock (&lock);
}
PTHREAD_MUTEX_RECURSIVE 表示锁会记住被锁了多少次。但是这个程序仍然没有任何错误地完成。即使我根本不调用解锁......我会期待一些错误,我仍然锁定锁或类似的东西......它会以某种方式自动解锁吗? (我将我的代码编译为gcc main.c -pthread)
【问题讨论】:
-
@G.M.,互斥体类型宏提供特定代码,而不是位掩码标志。您可以拥有
PTHREAD_MUTEX_ERRORCHECK或PTRHEAD_MUTEX_RECURSIVE,但不能同时拥有。实际上,这两个在理论上甚至都不兼容,因为它们在程序尝试锁定它已经锁定的互斥体的情况下提供了不同的行为。
标签: c multithreading locking mutex