linux中的pthread_mutex_t是否重入(如果一个线程试图获取它已经存在的锁,请求成功)

Avi*_*ano 3 c c++ linux multithreading

我来自Java,所以我熟悉同步而不是互斥.我想知道pthread_mutex_t是否也是重入.如果没有,还有另一种机制吗?

谢谢

nos*_*nos 6

这取决于互斥锁类型,默认情况下不进行检查,并且尝试在同一线程中多次锁定它会导致未定义的行为.在这里阅读它.

您可以创建一个类型的互斥锁,PTHREAD_MUTEX_RECURSIVE以便能够以递归方式锁定它,这是通过向pthread_mutex_init 提供具有所需互斥锁类型的pthread_mutexattr_t来完成的.

  • 另请注意,递归和重入不是一回事.递归互斥锁不一定是可重入的,即从中断`pthread_mutex_lock`的信号处理程序调用`pthread_mutex_lock`会调用未定义的行为.但是,可以以可重入的方式实现`pthread_mutex_lock`; 请参阅我在musl libc中的实现,了解如何完成它.关键细节是单个原子操作必须将互斥锁从解锁状态转换为locked-with-count-1状态. (4认同)