2

在图书馆pthread.hpthread_rwlock_t先进先出?

在下面的示例中,我们有多个线程。想象一下,每个线程都保证按顺序运行。

// 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 在所有线程都尝试获取锁之前不会释放锁。

4

1 回答 1

1

我做了一些研究,从 Oracle 网站上找到了这个文档,它解释了 pthread 读写锁的调度策略。

如果调用pthread_rwlock_unlock()导致读写锁对象解锁,并且有多个线程等待获取读写锁对象进行写入,则使用调度策略确定哪个线程获取读写锁写作的对象。如果有多个线程等待获取读写锁对象进行读,则使用调度策略确定等待线程获取读写锁对象进行读的顺序。如果读锁和写锁都有多个线程阻塞在 rwlock 上,则不指定是读取器先获取锁还是写入器先获取锁。

所以总而言之,它们不能保证是先进先出的。

于 2017-04-19T06:06:09.490 回答