在退出之前,我按以下顺序调用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()中使用时)
另一条线索。
当您试图销毁互斥锁时,请检查该互斥锁是否未被其他线程使用。

10-06 16:04