是不是pthread_wrlock_xxlock自旋锁?

时间:2011-08-20 00:31:37

标签: linux unix

我有关于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旋转,为什么它会返回失败而不是旋转?

1 个答案:

答案 0 :(得分:1)

因为它是相同的线程,它会产生死锁,因此返回代码EDEADLK绝对不是你想要的。

第一种情况看起来像是一种缺陷,因为它也应该返回EDEADLK。阻止只应在单独的线程中进行。