2011-08-20 97 views
1

我有一个关于pthread_wrlock_wlock和pthread_wrlock_rdlock的问题: 它们没有实现为自旋锁?是不是pthread_wrlock_xxlock自旋锁?

我在我的代码试过这样:

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

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

第一个案例看起来像一个缺陷,因为它也应该返回EDEADLK。阻塞应该只发生在单独的线程中。

+0

谢谢,史蒂夫,我已经在不同的线程中尝试了这一点,并且发生了死锁。 – kai