pthread_cond_destroy()的死锁

时间:2013-11-01 06:42:21

标签: linux multithreading

我的问题gdb输出:

Program received signal SIGINT, Interrupt. 0x00007ffff7bcb86b in
__lll_lock_wait_private ()    from /lib/x86_64-linux-gnu/libpthread.so.0 (gdb) bt
#0  0x00007ffff7bcb86b in __lll_lock_wait_private ()    from /lib/x86_64-linux-gnu/libpthread.so.0
#1  0x00007ffff7bc8bf7 in _L_lock_21 ()    from /lib/x86_64-linux-gnu/libpthread.so.0
#2  0x00007ffff7bc8a6e in pthread_cond_destroy@@GLIBC_2.3.2 ()    from /lib/x86_64-linux-gnu/libpthread.so.0
#3  0x0000000000400ab5 in control_destroy (mycontrol=0x6020c0) at control.c:20
#4  0x0000000000400f36 in cleanup_structs () at workcrew.c:160
#5  0x0000000000401027 in main () at workcrew.c:201
注意:程序运行在cygwin成功,但在ubuntu linux中运行,它就是死锁。 所有子线程在死锁之前连接完毕。

源代码来自网络:http://www.ibm.com/developerworks/cn/linux/thread/posix_thread3/thread-3.tar.gz

1 个答案:

答案 0 :(得分:1)

错误发生在control.c

int control_destroy(data_control *mycontrol) {
  int mystatus;
  if (pthread_cond_destroy(&(mycontrol->cond)))
    return 1;
  if (pthread_cond_destroy(&(mycontrol->cond)))
    return 1;
  mycontrol->active=0;
  return 0;
}

据推测,这应该是破坏互斥锁和条件变量。但它会两次破坏条件变量。