社区
进程/线程/DLL
帖子详情
STL list一个线程写,多个线程读能否不加读写锁
beidatianwang
2012-08-10 10:46:25
因为list是双向链表,而写线程只是在尾部新添加节点,不会插入和删除,而且只有一个写线程,那么可否不加锁?谢谢
...全文
635
17
打赏
收藏
STL list一个线程写,多个线程读能否不加读写锁
因为list是双向链表,而写线程只是在尾部新添加节点,不会插入和删除,而且只有一个写线程,那么可否不加锁?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
solomanII
2014-07-05
打赏
举报
回复
其实只用在里面长度<=1的情况下才需要加锁
beidatianwang
2012-08-16
打赏
举报
回复
恩 谢谢各位,我也加锁了,不能冒这个险
youngwolf
2012-08-15
打赏
举报
回复
肯定要加锁啊!
你sizeof一个空的list,看看有多大。
我在ubuntu下是16字节,说明它是有成员的,你怎么知道你从后面添加一个数据,不会影响到成员变量呢,或者从前面删除一个数据不会影响到成员变量呢?
事实上,链表内部存储有两种,一种是带一个表示链表当前大小的成员,一种不带,这两种存储代表了两种设计理念,但已经与本题无关了,你做了太多的假设,所以你觉得不用加锁,这些假设都是有问题的。
翅膀又硬了
2012-08-14
打赏
举报
回复
楼主可以弄俩list,一个用于写,一个用于读。读完之后,交换两个list。只需交换时候用下锁
这不是鸭头
2012-08-11
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
主要是读的时间太长,而写又比较频繁,如果用读写锁,那么读的时候写线程会等很久。我正在试不加锁的方法,之后和大家分享。
[/Quote]
你读为什么会耗时很长时间呢?
breezes2008
2012-08-10
打赏
举报
回复
去搜索“读写锁”
qian1314ss
2012-08-10
打赏
举报
回复
楼主怎么解决的 到时候说下
ArcRain
2012-08-10
打赏
举报
回复
我觉得需要加锁
Eleven
2012-08-10
打赏
举报
回复
需要加锁
计算机科学家的世界
2012-08-10
打赏
举报
回复
不可以,一定要加锁,有时候,否则可能出现以下情况:
你正在写最后一个结点,此时,有一个线程刚好在读最后一个结点,你说,这种情况怎么处理?
lijianli9
2012-08-10
打赏
举报
回复
多线程读写存在,偶认大部分情况加锁。但是看你写程序应用了,你对链表读取写入操作的使用
这不是鸭头
2012-08-10
打赏
举报
回复
应该加锁。
傻X
2012-08-10
打赏
举报
回复
我认为是可以的。链表嘛,分散存的。没啥问题
beidatianwang
2012-08-10
打赏
举报
回复
因为是链表,我认为写线程的追加操作只会改变最后一个节点,所以我在读线程中只是读取前size()-1个节点,这样是不是可以?ps:不想用锁主要因为读线程中需要大量的读取和比较,很耗时,而写线程只是追加一个节点。
写不动代码的人
2012-08-10
打赏
举报
回复
这要看你的读写速度
zhouzhipen
2012-08-10
打赏
举报
回复
可以不加锁。
beidatianwang
2012-08-10
打赏
举报
回复
主要是读的时间太长,而写又比较频繁,如果用读写锁,那么读的时候写线程会等很久。我正在试不加锁的方法,之后和大家分享。
vc++ 应用源码包_1
另外有只打开
一个
应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多
线程
断点续传下载文件 源码 gdiplus应用实例 ...
vc++ 应用源码包_6
另外有只打开
一个
应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多
线程
断点续传下载文件 源码 gdiplus应用实例 ...
C++
STL
STL
实战开发精讲视频
STL
是
一个
高效的C++程序库,它被容纳于C++标准程序库(C++ Standard Library)中,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了
一个
可扩展的应用框架,高度体现了软件...
vc++ 应用源码包_2
另外有只打开
一个
应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多
线程
断点续传下载文件 源码 gdiplus应用实例 ...
vc++ 应用源码包_5
另外有只打开
一个
应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多
线程
断点续传下载文件 源码 gdiplus应用实例 ...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章