如果我在持有锁的情况下进行pthread_create会发生什么?

时间:2014-04-11 12:38:30

标签: pthreads mutex

假设我有以下情况。我有一个线程,这个线程持有一个锁。虽然它正在这样做,我调用pthread_create,所以现在我有两个线程。假设第二个线程解锁。当第一个线程遇到解锁时会发生什么?

1 个答案:

答案 0 :(得分:1)

一个线程应该只解锁它自己锁定的锁,因此你的第二个线程不应该尝试解锁已被第一个线程锁定的互斥锁。

尝试解锁已被另一个线程锁定的互斥锁是未定义的行为,除非互斥锁类型为PTHREAD_MUTEX_ERRORCHECK,在这种情况下会返回错误。

此处有更多信息:http://linux.die.net/man/3/pthread_mutex_lock

相关部分:

  

如果互斥锁类型为PTHREAD_MUTEX_NORMAL,则应进行死锁检测   不提供。尝试重新锁定互斥锁会导致死锁。如果一个   线程尝试解锁未锁定的互斥锁或互斥锁   这是解锁的,未定义的行为结果。

     

如果互斥锁类型是PTHREAD_MUTEX_ERRORCHECK,则错误检查   应提供。如果某个线程试图重新锁定它具有的互斥锁   已经锁定,将返回错误。如果一个线程试图   解锁未锁定的互斥锁或解锁的互斥锁,a   错误将被退回。