STL list一个线程写,多个线程读能否不加读写锁

beidatianwang 2012-08-10 10:46:25
因为list是双向链表,而写线程只是在尾部新添加节点,不会插入和删除,而且只有一个写线程,那么可否不加锁?谢谢
...全文
635 17 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
需要加锁
  • 打赏
  • 举报
回复
不可以,一定要加锁,有时候,否则可能出现以下情况:
你正在写最后一个结点,此时,有一个线程刚好在读最后一个结点,你说,这种情况怎么处理?
lijianli9 2012-08-10
  • 打赏
  • 举报
回复
多线程读写存在,偶认大部分情况加锁。但是看你写程序应用了,你对链表读取写入操作的使用
这不是鸭头 2012-08-10
  • 打赏
  • 举报
回复
应该加锁。
傻X 2012-08-10
  • 打赏
  • 举报
回复
我认为是可以的。链表嘛,分散存的。没啥问题
beidatianwang 2012-08-10
  • 打赏
  • 举报
回复
因为是链表,我认为写线程的追加操作只会改变最后一个节点,所以我在读线程中只是读取前size()-1个节点,这样是不是可以?ps:不想用锁主要因为读线程中需要大量的读取和比较,很耗时,而写线程只是追加一个节点。
  • 打赏
  • 举报
回复
这要看你的读写速度
zhouzhipen 2012-08-10
  • 打赏
  • 举报
回复
可以不加锁。
beidatianwang 2012-08-10
  • 打赏
  • 举报
回复
主要是读的时间太长,而写又比较频繁,如果用读写锁,那么读的时候写线程会等很久。我正在试不加锁的方法,之后和大家分享。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧