天下

记录修行的印记

STL中map,vector等线程安全一个简单的个人想法

 

主线程M
数据D:map
<int,std::string>
全局变量bool:IsModified
线程B负责更新D,D更新时,并负责修改全局IsModified 为true
工作线程:A,只进行读数据D,不进行写操作.

线程A伪代码如下:
while(1){
    map
<int,std::string> *pData;
    if (IsModified){
        pData 
= GetData();
       
//重新获取新数据
    }
    //迭代pData
    //do something
    Sleep(1);
}


//这样就不需要使用临界区了
//个人想法,欢迎拍砖.

posted on 2011-03-19 14:42 天下 阅读(5080) 评论(11)  编辑 收藏 引用

评论

# re: STL中map,vector等线程安全一个简单的个人想法[未登录] 2011-04-25 16:50 kenshin

这个不行的啊
IsModified = ture
map: push map

是两条语句不是一个原子操作了

比如走 到
IsModified = ture 的时候
两个线程都到下一句
1. map:push map
2. pData = GetData();
就2了啊。 你这样做是可以减少发生的几率 ,但是出问题了 调试起来更加恼火  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-03 09:18 天下

@kenshin

说的很好,谢谢.


补充下:
线程B负责更新D,D更新时,并负责修改全局IsModified 为true

这个改成:
线程B负责更新D,D更新后,并负责修改全局IsModified 为true

GetData();是从数据库或文件获取.
这样就可以了吧.
  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-03 15:47 溪流

@天下
还是不可以。

1、如果GetData是从数据库或者文件获取,那么线程安全的责任被转嫁到了相关的IO层面;如果是放在内存中,那么这里你还是需要解决线程安全问题。

2、你的 IsModified 变量的改变,也不具有原子性。当数据源更新后,可能在你试图将 IsModified 改为 True 的同时,线程 A 已经读到了旧的 False 值。

其实,特征很好找,保证线程安全必须有具备原子操作特征的玩意儿出现,如 Windows 下的 CriticalSection、InterlockedIncrement 等等;如果没有,你就没法保证。  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-03 16:38 天下

@溪流

呵呵,非常同意你的回复

说下要求背景吧,应用场影实时性要求不高,比如说线程B只是更新了配置文件.
线程A然后重新获取而已.



  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-03 16:43 溪流

@天下
这不是能被说成“实时性高不高”的,只有两种情形:1、需要线程安全;2、不需要线程安全。不存在两者之间的模糊界限,否则,即使是你认为的是实行不高的场景,在用户那里一定会出现你预料之外的情况。  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-03 18:32 天下

@溪流

还真较真啊,治学态度很严谨
学术确实需要这样.

不过,就线程安全来说,这只是个概念的理解而已.所以造成不同的观念.呵呵.



  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-03 20:37 溪流

@天下
哎,,我说的不是学术上的,而是工程上的。
学术上倒是可以假定某个操作是原子的,就可以了;假定实时性“不高”也可以。。。  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2011-05-04 18:42 天下

@溪流

欢迎加QQ群:88028655   回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2012-02-10 09:56 Mr.CT

不行的哦。想法过于简单!  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2012-02-10 13:14 天下

@Mr.CT

确实不行,
以前理解有误.

  回复  更多评论   

# re: STL中map,vector等线程安全一个简单的个人想法 2016-03-20 11:21 Allen

看到楼主在进步了...
这样确实不可以...
需要锁之类的  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年7月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(2)

随笔分类(367)

随笔档案(318)

链接

最新随笔

搜索

最新评论