【发布时间】:2021-11-09 08:08:24
【问题描述】:
在 pthread_mutex_destroy 的 linux 手册页中,它有以下代码 sn-p 下面。 关于这个销毁互斥锁的过程,我不明白的一件事是,我们怎么知道在 pthread_mutex_unlock 和 pthread_mutex_destroy 之间没有其他线程试图获取所述互斥锁上的锁?
通常应该如何处理? 1)是否应该使用额外的互斥锁来确保不会发生这种情况? 2) 还是客户有责任在达到 0 后不尝试增加引用计数?
obj_done(struct obj *op)
{
pthread_mutex_lock(&op->om);
if (--op->refcnt == 0) {
pthread_mutex_unlock(&op->om);
(A) pthread_mutex_destroy(&op->om);
(B) free(op);
} else
(C) pthread_mutex_unlock(&op->om);
}
【问题讨论】:
-
有趣的问题。这对我来说并不重要,因为我从来没有在我的生活中明确地销毁过互斥锁。不过,对于那些真正像互斥锁一样破坏同步的人来说,这是一个有趣的问题。