我有关于pthread_wrlock_wrlock和pthread_wrlock_rdlock的问题: 它们不是作为自旋锁实现的吗?
我在我的代码中尝试了这个:
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
pthread_rwlock_rdlock (&rwlock);
pthread_rwlock_wrlock (&rwlock);
=>这会导致我预期的死锁
但是,我不明白为什么受尊敬的人不会造成僵局:
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
pthread_rwlock_wrlock (&rwlock); // return 0
pthread_rwlock_rdlock (&rwlock); // return 35
如果pthread_rwlock_rdlock旋转,为什么它会返回失败而不是旋转?
答案 0 :(得分:1)
因为它是相同的线程,它会产生死锁,因此返回代码EDEADLK
绝对不是你想要的。
第一种情况看起来像是一种缺陷,因为它也应该返回EDEADLK
。阻止只应在单独的线程中进行。