博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读写锁优先级 写饥饿
阅读量:5927 次
发布时间:2019-06-19

本文共 970 字,大约阅读时间需要 3 分钟。

对一个同享的数据布局,读的频率远弘远于写,所以用了读写锁.但是发现写线程老是抢不到锁.

按The Open Group 的Single UNIX? Specification所说,"Thepthread_rwlock_rdlock() function applies a read lock to the read-write lock referenced by rwlock. The calling thread acquires the read lock if a writer does not hold the lock and there are no writers blocked on the lock. It is unspecified whether the calling thread acquires the lock when a writer does not hold the lock and there are writers waiting for the lock" 貌似意思是说,没有writer在持有写锁的时,reader是可以拿到读锁的。然则没有划定,若是有writer在等写锁,该若何?

自己测试结果:

对于ACE_RW_Mutex,当几个线程不断获取释放读锁,各读线程使用锁的时间叠加,锁讲一直处于被读取状态,此时加写锁,写线程将一直处于等待状态。

即ACE_RW_Mutex 并不保证读写锁请求和处理时序。读锁获条件是只要当前锁没有被别人以写方式获取就可以获取到读权限。
这样做的优势是由于读锁可并发执行,提高CPU利用率。缺点是在读锁使用频度较高情况下,会出现不断有线程使用读锁,写锁线程饥饿等待。

 

pthread_rwlockattr_setkind_np 应该可以调整读写锁优先级顺序。

示例如下:

pthread_rwlockattr_t attr;

pthread_rwlockattr_init(&attr);
pthread_rwlockattr_setkind_np (&attr, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
(void)pthread_rwlock_init(&rwlock, &attr);

 

转载地址:http://ilhvx.baihongyu.com/

你可能感兴趣的文章
使用yum来安装CentOS图形界面包
查看>>
dns服务器迁移方法简单说明
查看>>
医院CIO的一幅工作对联
查看>>
[IE编程] 如何设置IE8的WebBrowser控件(MSHTML) 的渲染模式
查看>>
Provisioning Services 7.6 入门到精通系列之九:创建和配置目标设备
查看>>
HTTP 错误 401.1(401.2/401.3) - 未经授权:访问由于凭据无效被拒绝
查看>>
从“盗版”说开去
查看>>
透明遮罩层
查看>>
漫谈实体、对象、DTO及AutoMapper的使用
查看>>
找出与某id相近的四条记录
查看>>
稍不留神产生代码垃圾
查看>>
有序输出两棵二叉查找树中的元素
查看>>
Microsoft.Office.Core 引用以及 Microsoft.Office.Core.MsoTriState 的问题
查看>>
JAVA 设计模式 职责链模式
查看>>
在MOSS中开发和部署Infopath
查看>>
Node.js meitulu图片批量下载爬虫1.01版
查看>>
宽字符编码和解码通用类[CodeWidthChartUtility]
查看>>
javascript:浮动div,可拖拽div,遮罩层(div和iframe实现)
查看>>
java03
查看>>
Go语言并发机制初探
查看>>