在库中pthread.h
是pthread_rwlock_t
FIFO吗?
在下面的示例中,我们有多个线程。想象一下,保证每个线程都能按顺序运行。
// Thread 1 - does a write lock
pthread_rwlock_wrlock(&lock);
// Thread 2 - does a read but has to wait for 1
pthread_rwlock_rdlock(&lock);
// Thread 3 - does a read but has to wait for 1
pthread_rwlock_rdlock(&lock);
// Thread 4 - does a write but has to wait for 1
pthread_rwlock_wrlock(&lock);
// Thread 1 - unlocks
pthread_rwlock_unlock(&lock);
// who gets the lock?
线程1释放锁后,谁得到了锁?是否保证线程2和3可以这样做?还是可以给4?
再次,想象一下,保证每个线程都按顺序运行,并且线程1直到所有线程都试图获得锁后才释放锁。
最佳答案
我做了一些研究,发现this document from the Oracle website解释了pthread读写锁的调度策略。
因此,总之,不能保证它们是FIFO。