首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C多线程:如果所有线程都可以同时访问读锁( Read,pthread_rwlock_rdlock),那么它的优点是什么?

C多线程:如果所有线程都可以同时访问读锁( Read,pthread_rwlock_rdlock),那么它的优点是什么?
EN

Stack Overflow用户
提问于 2017-02-15 14:25:27
回答 2查看 366关注 0票数 1

我在这个线程问题上是个新手:\

我设想写锁的行为就像等待全局变量确认的while。比如:

代码语言:javascript
复制
/* pthread_rwlock_wrlock */

    while (is_blocked) {
        /* waiting */
    }
    is_blocked = true;

    (writing code...)

/* pthread_rwlock_unlock */
    is_blocked = false;

对吗?那么读锁是怎么工作的呢?如果它是共享的,为什么要使用它?

信息:

pthread_rwlock_rdlock() -获取共享的读锁

pthread_rwlock_wrlock() -获取一个独占的写锁

EN

回答 2

Stack Overflow用户

发布于 2017-02-15 14:43:27

读锁的目的,是阻止作者。

  • 读取器可以获得一个锁,如果有,没有写锁,
  • 如果一个编写器完全没有锁,那么它可以得到一个锁。

没有一个简单的实现,你建议的实现。

例如有种族条件,有时会失败。

票数 3
EN

Stack Overflow用户

发布于 2017-02-15 14:43:09

当您读取受保护的资源时,您不希望在读取它时更改它。

读锁阻止写锁!

这意味着,当您拥有一个读锁时,试图获得写锁的人将不得不等到您,以及其他拥有读锁的人完成读取。由于阅读不会改变资源,所以几个读者同时阅读是可以的。

请注意,在此上下文中读取操作的定义是不更改受保护资源状态的任何操作。因此,为了读/写锁的目的,如果受保护的资源是流(如stdin或套接字),那么从它读取将改变其状态,并且应该需要一个写锁。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42252035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档