在实施读写器锁定时,我们可以使用std::shared_mutex
std::shared_lock
和std::lock_guard
或std::unique_lock
。
问题>这个新的特写作者或读者是否更喜欢?
根据安德鲁的评论更新
// Multiple threads/readers can read the counter's value at the same time.
unsigned int get() const {
std::shared_lock<std::shared_mutex> lock(mutex_);
return value_;
}
// Only one thread/writer can increment/write the counter's value.
void increment() {
std::unique_lock<std::shared_mutex> lock(mutex_);
value_++;
}
从上面的示例中可以看出,我无法控制读写器优先级。
答案 0 :(得分:3)
它既不是(如果实施得当)。而是通过 fair 技术选择读者和作者。这就是为什么这个特性既不能在API中设置也不能指定的原因。
This answer详细说明了如何完成。
答案 1 :(得分:3)
在实践中:
pthread_rwlock_t
,如果不是,则回到Howard提到的算法。因此,如果pthread_rwlock_t
可用,则使用的算法取决于pthreads实现。我相信glibc默认喜欢读者。 MSVC使用Windows SRWLOCK
,其documentation表示
无法保证请求的线程的顺序 所有权将被授予所有权; SRW锁既不公平也不公平 FIFO。