社区
C++ 语言
帖子详情
数据互斥问题(多线程编程技术)
bailee
2011-06-12 12:35:19
几个线程(或进程)在对一个变量操作时,是需要保护的,这点大家都知道。
我的问题是:
1、多线程都只是在读同一变量,这个也需要保护吗?
2、如果只有一个线程是写变量的线程,其他线程都只是读,这种情况怎么处理最好?是否也不需要保护?
阿笨一贯主张:关注也给分!!!
...全文
215
20
打赏
收藏
数据互斥问题(多线程编程技术)
几个线程(或进程)在对一个变量操作时,是需要保护的,这点大家都知道。 我的问题是: 1、多线程都只是在读同一变量,这个也需要保护吗? 2、如果只有一个线程是写变量的线程,其他线程都只是读,这种情况怎么处理最好?是否也不需要保护? 阿笨一贯主张:关注也给分!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bailee
2011-06-15
打赏
举报
回复
请再一次关注一下,谢谢
ryfdizuo
2011-06-15
打赏
举报
回复
阿笨,需要找本操作系统书看,谢谢!
天外来客-007
2011-06-13
打赏
举报
回复
只读属性无需保护,而涉及到写的属性则需要保护,具体的请参照操作系统相关知识!
yyg990441
2011-06-12
打赏
举报
回复
1、多线程都只是在读同一变量,这个也需要保护吗?
不需要
2、如果只有一个线程是写变量的线程,其他线程都只是读,这种情况怎么处理最好?是否也不需要保护?
如果该变量很简单,比如是个整数,那么应该使用原子操作
如果读变量线程读变量后进行了较长时间的操作,那么应该用读写锁(读线程加读锁,写线程加写锁)
否则,简单期间,对任意线程中对该变量的读写处均用临界区包围起来。
relive007
2011-06-12
打赏
举报
回复
只读不写,是不需要保护的。但是有写有读的时候,不管是读还是写都需要保护,就是读的时候也要进行保护。
liutengfeigo
2011-06-12
打赏
举报
回复
你想到的,书上都有.
龙行天下之Sky
2011-06-12
打赏
举报
回复
1、多线程都只是在读同一变量,这个也需要保护吗?
这个不需要保护
2、如果只有一个线程是写变量的线程,其他线程都只是读,这种情况怎么处理最好?是否也不需要保护?
这个只需要在写变量的线程里保护就可以了
C++中如果是内置类型变量的话,可以用关键字volatile来进行修饰就可以了
如果是自定义变量,则在写的现场中进行保护就可以了
vcf_reader
2011-06-12
打赏
举报
回复
其实亲自动手测试是最好的办法
lj10193019
2011-06-12
打赏
举报
回复
关注一下!
学习了!
东莞某某某
2011-06-12
打赏
举报
回复
加锁/关键代码段 速度相当不错了,那么多读线程,为了安全,建议使用。
bailee
2011-06-12
打赏
举报
回复
8楼的正解。
偶不是不会加锁,加锁时程序的效率不高,这就是我考虑的。
不过最后的结果是:在速度与正确性上,我选择了速度。
原因:只是偶尔写一次,整个程序过程中,都可能只写两三次,而读操作,却是几万次。
更重要的是:这程序是LSP程序,是过滤数据的,如果太慢,那其他程序就有可能假死在那里。
所以想了解一下,在一写多读时,如果不加锁,都会出哪些问题?
继续等待其他建议......
hengshan
2011-06-12
打赏
举报
回复
你要明白一点就是,两个不同线程可见的资源才需要保护的。
问题一:
不需要保护
问题二:
必须要在读资源、写资源的地方都进行保护,方法可以用“读、写锁”
wangsifu2009
2011-06-12
打赏
举报
回复
总结楼上的,基本就成正解了
yyg990441
2011-06-12
打赏
举报
回复
"我只是小小的修改了一个DWORD值"
显然用原子操作啊
CZQing_ze
2011-06-12
打赏
举报
回复
其实i我是来关注的。。。。
qq120848369
2011-06-12
打赏
举报
回复
Linux有读写锁,专门解决共享读,独占写的问题。
maoxing63570
2011-06-12
打赏
举报
回复
[Quote=引用 7 楼 bailee 的回复:]
谢谢大家,呵。
第一个问题解决。
第二个问题升级:如果是一写多读,又不做保护,有何结果?
1、写成功,读也是读的改变后的值;
2、写成功,正在读的读原值,后面再来读的读新值;
3、写不成功,出现读写冲突。
我只是小小的修改了一个DWORD值,呵,本人担心的是第三种情况。
[/Quote]
在正确性与速度之间还是选择正确性吧,加锁吧
bailee
2011-06-12
打赏
举报
回复
谢谢大家,呵。
第一个问题解决。
第二个问题升级:如果是一写多读,又不做保护,有何结果?
1、写成功,读也是读的改变后的值;
2、写成功,正在读的读原值,后面再来读的读新值;
3、写不成功,出现读写冲突。
我只是小小的修改了一个DWORD值,呵,本人担心的是第三种情况。
ryfdizuo
2011-06-12
打赏
举报
回复
[Quote=引用楼主 bailee 的回复:]
几个线程(或进程)在对一个变量操作时,是需要保护的,这点大家都知道。
我的问题是:
1、多线程都只是在读同一变量,这个也需要保护吗?
2、如果只有一个线程是写变量的线程,其他线程都只是读,这种情况怎么处理最好?是否也不需要保护?
阿笨一贯主张:关注也给分!!!
[/Quote]
找本操作系统书看一下吧,补充一下基础知识。
ryfdizuo
2011-06-12
打赏
举报
回复
1、多线程都只是在读同一变量,这个也需要保护吗?
==========
同时读取没有关系的。。。
2、如果只有一个线程是写变量的线程,其他线程都只是读,这种情况怎么处理最好?是否也不需要保护?
===========
有读有写,该变量就是临界资源,需要互斥访问,具体方法有临界区,信号量,互斥锁。
多线程
之同步与
互斥
多线程
1.线程的基本概念2.线程的
互斥
和同步2.1 基本概念2.2
互斥
的实现2.3 同步的实现补充:生产消费者模型参考资料 1.线程的基本概念
多线程
可以将计算密集型(实时)和I/O密集型(实际中会等待)应用分配到多...
linux
多线程
编程——同步与
互斥
我们在前面文章中已经分析了
多线程
VS多进程,也分析了线程的使用,现在我们来讲解一下linux
多线程
编程之同步与
互斥
。 现在,我们不管究竟是
多线程
好还是多进程好,先讲解一下,为什么要使用
多线程
? 一、 为什么要用...
C++
多线程
编程实践:从基础到实例的全面指南
代码示例二、C++11线程库1 C++11线程库的概念和特性2 线程库中的关键类和函数3 使用线程库创建和控制线程4 使用线程库完成线程之间的同步和
互斥
5 原子变量和无锁
数据
结构的使用三、
多线程
编程实践1
多线程
程序的...
多线程
编程——
互斥
量实现读者优先与写者优先策略的实现与分析
一、实验目的1、掌握基本的
多线程
编程技术
2、掌握基本的线程间同步技术3、熟练使用pthread线程库调用接口二、实验内容编写
多线程
程序解决读者-写者
问题
:1. 至少有3个读者和2个写者2. 每个读者写者进出
数据
集都...
操作系统实验1
多线程
编程解决进程间同步和
互斥
问题
(C语言版)
掌握并发进程中同步与
互斥
的机制,基于线程的
编程技术
开发类似生产者—消费者
问题
的演示程序。 二、实验方法与步骤(需求分析、算法设计思路、流程图等)1.进程同步和
互斥
的概念:进程同步的概念
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章