我在这个线程问题上是个新手:\
我设想写锁的行为就像等待全局变量确认的while。比如:
/* pthread_rwlock_wrlock */
while (is_blocked) {
/* waiting */
}
is_blocked = true;
(writing code...)
/* pthread_rwlock_unlock */
is_blocked = false;对吗?那么读锁是怎么工作的呢?如果它是共享的,为什么要使用它?
信息:
pthread_rwlock_rdlock() -获取共享的读锁
pthread_rwlock_wrlock() -获取一个独占的写锁
发布于 2017-02-15 14:43:27
读锁的目的,是阻止作者。
没有一个简单的实现,你建议的实现。
例如有种族条件,有时会失败。
发布于 2017-02-15 14:43:09
当您读取受保护的资源时,您不希望在读取它时更改它。
读锁阻止写锁!
这意味着,当您拥有一个读锁时,试图获得写锁的人将不得不等到您,以及其他拥有读锁的人完成读取。由于阅读不会改变资源,所以几个读者同时阅读是可以的。
请注意,在此上下文中读取操作的定义是不更改受保护资源状态的任何操作。因此,为了读/写锁的目的,如果受保护的资源是流(如stdin或套接字),那么从它读取将改变其状态,并且应该需要一个写锁。
https://stackoverflow.com/questions/42252035
复制相似问题