社区
C++ Builder
帖子详情
多线程读写一个TList,读的时候采用共享锁,写的时候用独占的锁,如何实现?
beststone
2006-09-20 10:53:21
多线程读写一个TList,包括增删改读。由于读的时候比较多,写得概率较低。所以
我希望多个线程读的时候采用共享锁,写的时候用独占的锁,如何实现?
这样会不会比全部使用独占的锁提高性能?
谢谢先
...全文
218
7
打赏
收藏
多线程读写一个TList,读的时候采用共享锁,写的时候用独占的锁,如何实现?
多线程读写一个TList,包括增删改读。由于读的时候比较多,写得概率较低。所以 我希望多个线程读的时候采用共享锁,写的时候用独占的锁,如何实现? 这样会不会比全部使用独占的锁提高性能? 谢谢先
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
beststone
2006-09-20
打赏
举报
回复
谢谢明白了。
xiaoshi0
2006-09-20
打赏
举报
回复
TryEnterCriticalSection的意思就是试一下,看能不能获得关键代码段的访问权。
在你的程序中的意思就是现在是否有正在写的?如果有就返回FALSE,如果没有就返回TRUE.
好了,这回你在读的时候判断一下,如果有正在写的,你就别读了,如果没有正在写的,你就读就好了。
beststone
2006-09-20
打赏
举报
回复
仔细看了一下TryEnterCriticalSection的文档,呵呵,明白了,还是自己没看仔细(英文有待提高……),
但是还有一个疑问就是:我在读的时候,一个删除的进程来了,他是否等待写的线程释放资源?还是直接进入临界区删掉某个item。如果这样的话,读的线程对Item的遍历不就产生溢出了吗?
beststone
2006-09-20
打赏
举报
回复
非常谢谢,但是我还是有点不理解。
如果多个线程同时TryEnterCriticalSection的话,也只能有一个线程会成功,其他的返回失败,不知道我这样的理解是否正确。
我希望是可以多个线程同时读,但是写的时候只能有一个线程占用这个list。
wood542344
2006-09-20
打赏
举报
回复
这个是你理解有错了。
读就是读,怎么会删呢?读的时候TryEnterCriticalSection和LeaveCriticalSection配对操作就可以了啊,写的时候才要独占。删、改也是要独占。
beststone
2006-09-20
打赏
举报
回复
谢谢xiaoshi0(Rain) ,
但是由于读的时候我需要用for()循环来读的。如果不加锁在读的中间被删掉一条数据岂不是出现数组溢出?
TryEnterCriticalSection 成功后一样也是独占使得锁定和EnterCriticalSectiony应该没有差别,对吗?
xiaoshi0
2006-09-20
打赏
举报
回复
只有写的时候需要加锁,读的时候不需要。
所以,写的时候可以用EnterCriticalSection和LeaveCriticalSection配对操作,读的时候用TryEnterCriticalSection和LeaveCriticalSection配对操作。
如何使用C#
读
写
锁
ReaderWriterLockSlim
读
写
锁
的概念很简单,允许多个
线
程同时获取
读
锁
,但同一时间只允许一个
线
程获得
写
锁
,因此也称作
共享
-
独占
锁
。在C#中,推荐使用ReaderWriterLockSlim类来完成
读
写
锁
的功能。 某些场合下,对一个对象的
读
取次数远远...
JUC——
读
写
锁
读
锁
又叫
共享
锁
,可以允许多个
线
程
读
数据;
写
锁
又叫做
独占
锁
,只能允许一个
线
程进行
写
操作。
读
锁
和
写
锁
都可能引起死
锁
现象: 所以为避免死
锁
现象,对相应数据上什么
锁
,就只对相应数据做什么操作。 ...
Java 多
线
程之 ReentrantReadWriteLock(
读
写
锁
/
共享
锁
/排他
锁
)
ReentrantReadWriteLock 是Java中提供的一种
读
写
锁
实现
,它允许多个
线
程同时
读
取
共享
资源,但在
写
操作时需要
独占
访问。它是对传统互斥
锁
的一种改进,可以提高并发性能。
读
写
锁
的主要目的是在
读
多
写
少的场景下,提供...
读
写
锁
及集合安全性问题总结
顾名思义:
读
可以被多
线
程同时
读
,
写
的时候只能有一个
线
程去
写
。
独占
锁
(
写
锁
) :一次只能被一个
线
程占有
共享
锁
(
读
锁
):多个
线
程可以同时占有ReadwriteLock
读
-
读
可以共存!
读
-
写
不能共存!
写
-
写
不能共存! ...
Java 多
线
程之 StampedLock(
读
写
锁
/乐观
读
锁
/
共享
锁
/排他
锁
)
StampedLock是Java 8引入的一种
读
写
锁
的
实现
,它提供了一种乐观的
读
锁
(Optimistic Read Lock)和悲观的
读
锁
(Pessimistic Read Lock),和
写
锁
(Write Lock),以及对
读
-
写
冲突的解决方案。StampedLock的设计目标是...
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章