在退出之前,我按以下顺序调用main()
:pthread_cancel()
其他线程使用“等待”的mtx
(它们正在等待其他cond_变量和互斥量。也许这就是问题所在?pthread_cond_destroy(&cnd)
(与mtx
相“耦合”)pthread_mutex_unlock(&mtx)
pthread_mutex_destroy(&mtx)
但是,最后一个函数的结果是EBUSY
。每次另一个线程使用互斥锁时,它几乎会立即释放互斥锁。另外,如前所述,在试图销毁互斥锁之前,我会杀死所有这些线程。
为什么会这样?
最佳答案
根据man pthread_mutex_destroy
:
如果出现以下情况,pthread_mutex_destroy()函数可能会失败:
埃布西
当互斥锁被锁定或引用时(例如,
在pthread_cond_timedwait()或pthread_cond_wait()中使用时)
另一条线索。
当您试图销毁互斥锁时,请检查该互斥锁是否未被其他线程使用。