c– 当有很多读者时使用pthread_rwlock的效率

c– 当有很多读者时使用pthread_rwlock的效率,第1张

概述当我查看pthread_rwlock_unlock函数的手册页时,我注意到如果调用线程没有rwlock的所有权,func将返回EPERM.由于rdlock允许多个线程获取锁,因此必须有一个数据结构,如链接或数组,以存储一个特定rwlock的ownerid.问题出在这里:rwlock旨在实现读取 *** 作比写入 *** 作更频繁的效率,但如果有大量不同的线程获得读取锁定,每

当我查看pthread_rwlock_unlock函数的手册页时,我注意到如果调用线程没有rwlock的所有权,func将返回EPERM.

由于rdlock允许多个线程获取锁,因此必须有一个数据结构,如链接或数组,以存储一个特定rwlock的ownerID.

问题出在这里:

rwlock旨在实现读取 *** 作比写入 *** 作更频繁的效率,但如果有大量不同的线程获得读取锁定,每次调用pthread_rwlock_unlock()时,都需要时间来查找天气调用线程是有效的所有者.这个场景的时间复杂度是多少?

非常感谢你们:)

最佳答案n.m提供了一个很好的答案.您对保留锁所有权的结构的假设在您标记的linux实现上是错误的,并且类似于计数方法n.m.接触.

以下是/usr/include/bits/pthreadtypes.h中pthread_rwlock_t类型的编辑版本

  struct  {    int __lock;    unsigned int __nr_readers;    unsigned int __readers_wakeup;    unsigned int __writer_wakeup;    unsigned int __nr_readers_queued;    unsigned int __nr_writers_queued;    int __writer;    int __shared;    unsigned int __flags;  } __data;

您可以看到计数字段. pthread_rwlock_unlock.c也没有返回EPERM,大部分工作都围绕在pthread_rwlock_wrlock.c和pthread_rwlock_rdlock.c检查作者所有权.

您可以使用一个小程序来测试它,以声明并初始化一个锁,然后解锁它.

因此,时间复杂度似乎足够接近于此实现中的常量,但是通过对您可能已经想到或想要存在的某些功能进行纾困来获得.

总结

以上是内存溢出为你收集整理的c – 当有很多读者时使用pthread_rwlock的效率全部内容,希望文章能够帮你解决c – 当有很多读者时使用pthread_rwlock的效率所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1046883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存