社区
C++ 语言
帖子详情
大家来讨论一下什么时候应该用互斥机制、锁、关键区域。怎么用?
AlanBruce
企业官方账号
2010-03-22 05:24:54
我觉得自己越用越晕…………
都不知道用的可有作用
...全文
199
21
打赏
收藏
大家来讨论一下什么时候应该用互斥机制、锁、关键区域。怎么用?
我觉得自己越用越晕………… 都不知道用的可有作用
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
a469322833
2012-01-04
打赏
举报
回复
多线程
a469322833
2012-01-04
打赏
举报
回复
多纯种,主线程与子线程都会对全局变量进行操作时,应该使用!
SUXYU
2010-04-08
打赏
举报
回复
如果只是从它们的本义去理解这些东西的内含,会越弄越糊涂。换一个思路,从为什么会有这些东西角度去看应该更能理顺关系。实际上它是人们处理以下问题总结出来的最有效办法的一个形象说法:
1、多任务多进程序设计中的稀有资源共享使用,特别是有序列要求的资源(如打印机、串口、磁带机等),每一个进程,只能在它的特定任务完成后才能将资源交给其它进程使用。否则其它进程都只能等。在使用这些资源上的互斥是很好理解的。解决此类问题的最好办法就是操作灯(一个系统有多个相同的资源时),如果只有唯一的资源,就是锁的说法了。后来将此方法推广到其它和这种情况类似的场合(如:对专门用途进程的共享;由于系统需要,两个进程不能同时运行的场合;共享数据等)就有了进程互斥、锁、关联数据区等说法了。。。。
2、共享数据一直是进程及进程内和棋模块进行数据传递最方便和最常用的方法之一。但在有多个进程或模块都会修改数据的时候,会出现不可预料结果的问题(乱套了)。这其中有些是系统设计时已规定了的共享策略(多进程时),也有为防止程序设计的错误(多模块时)。为防止数据乱套了会産严重后果的情况发生,就有了关键数据的说法了。对此类数据必须加锁,直到加锁的模块确认安全后才释放锁。。。
traceless
2010-03-22
打赏
举报
回复
以前我们有个数学老师,不想再继续讲答题目时,就这样说:
说,说得完吗?讲,又讲得完吗?好了,同学们,我们继续下一道题吧
嘿嘿。。。
FrankSun80
2010-03-22
打赏
举报
回复
线程同步时候使用:
进程内用关键区域
进程间用互斥
它们都叫锁,钥匙只有一个,谁拿到谁进入需要同步的代码段
herman~~
2010-03-22
打赏
举报
回复
多线程同步时候会用到
具体我讲不全,可以google下多线程编程嘛
jackyjkchen
2010-03-22
打赏
举报
回复
[Quote=引用 14 楼 forster 的回复:]
线程切换机制 《 critical section 《 mutex
应该是这样的吧 mutex 比 critical section有timeout 效率肯定低
windows也是抄的linux核心机制应该一样的
[/Quote]
恐怕应该反过来,Windows下的多线程发展比linux下早,unix/linux早期都只有“多进程”机制,后来才加进了线程
forster
2010-03-22
打赏
举报
回复
线程切换机制 《 critical section 《 mutex
应该是这样的吧 mutex 比 critical section有timeout 效率肯定低
windows也是抄的linux核心机制应该一样的
jackyjkchen
2010-03-22
打赏
举报
回复
[Quote=引用 5 楼 forster 的回复:]
critical section内部也应该是mutex实现的
他可以让线程挂起
mutex的话 更灵活吧 可以设置timeout
锁 指什么 spinlock?
内核中spinlock是抬高irql实现的
[/Quote]
非也,效率完全不同,关键段明显快过互斥体,仙剑Windows核心编程,这个问题是书本上的知识,没什么好讨论的。
AlanBruce
2010-03-22
打赏
举报
回复
[Quote=引用 9 楼 chenhu_doc 的回复:]
一言难尽,所以看书才是最好的方法。
[/Quote]
推荐几本讲的不错的 啊
瓶盒
2010-03-22
打赏
举报
回复
当然是多线程的时候用
q645989637
2010-03-22
打赏
举报
回复
帮顶 学习
chenhu_doc
2010-03-22
打赏
举报
回复
一言难尽,所以看书才是最好的方法。
AlanBruce
2010-03-22
打赏
举报
回复
恩…………
用的人不是很多吗
贪食蛇男
2010-03-22
打赏
举报
回复
我就来看看,用不太好。
kim_jinye
2010-03-22
打赏
举报
回复
纯粹来接分的!
forster
2010-03-22
打赏
举报
回复
critical section内部也应该是mutex实现的
他可以让线程挂起
mutex的话 更灵活吧 可以设置timeout
锁 指什么 spinlock?
内核中spinlock是抬高irql实现的
至善者善之敌
2010-03-22
打赏
举报
回复
互斥,我理解他区别于临界区(用到了锁)是可以支持不同进程间的同步,比如说你的QQ进程和你的MSN进程通讯同步!
关键区域???是什么?
candeabc123
2010-03-22
打赏
举报
回复
支持线程同步?
菜鸟飞过。
lb_bn
2010-03-22
打赏
举报
回复
帮楼主顶一下。。。
加载更多回复(1)
透析Linux系统编程
比如线程同步,不仅引出
互斥
锁
条件变量 自旋
锁
读写
锁
使用方式,同时给出各个
机制
的应用场景 ; 比如 进程间通信,引出各个进程间通信的
机制
原理,给出各个进程间通信的应用场景; 比如 ...
同步
机制
——
互斥
体
锁
、读/写
锁
、信号量
锁
、条件变量
(区别于linux内核所用的自旋
锁
和
互斥
锁
,本文中讨论的
锁
用于普通编程) 当两个或多个并发线程的执行次序造成了意想不到的错误结果时,“竞态条件”就是会产生。防止“竞态条件”的一个方法是使用同步
机制
,对访问“共享资源”的代码中
关键
段实施“品行访问”控制。常用的OS同步
机制
有:
互斥
体(mutex)、“多读取者/单写入者”
锁
(reader/writer locks)、信号量(semaphores)
解决多线程编程中的同步
互斥
问题
一、解决多线程编程中的同步
互斥
问题, 1、可以使用
关键
段CRITICAL_SECTIONI来解决。 2、
关键
段CRITICAL_SECTION一共有四个函数,分为初始化,销毁,进入
关键
区域
、离开
关键
区域
。(
关键
段一般用CS代替) (1)、初始化
关键
段函数: void InitializeCriticalSection(LPCRITICAL_SECTION lpCritic
多线程(
互斥
锁
、读写
锁
、条件变量、信号量、自旋
锁
)相关
概述 同步和
互斥
在多线程和多进程编程中是一个基本的需求,互相协作的多个进程和线程往往需要某种方式的同步和
互斥
。POSIX定义了一系列同步对象用于同步和
互斥
。 同步对象是内存中的变量属于进程中的资源,可以按照与访问数据完全相同的方式对其进行访问。默认情况下POSIX定义的这些同步对象具有进程可见性,即同步对象只对定义它的进程可见;但是通过修改同步对象的属性可以使得同步对象对不同的进程可见,具
CPU Memory: 为什么需要使用
互斥
量mutex
多线程的变成需要使用旗语,同步代码段,
互斥
量或者是任何调用它们的编程语言。我们大多数基本上知道为什么我们需要它们:为了阻止多线程访问同一块内存
区域
。你是否停下来真正想过,它们究竟是干什么的?为什么你需要保护存储空间?这个听上去
应该
是CPU该干的活。大多数是的时候,
互斥
量也就是一个简单的实现,但是理解为什么需要它却没那么容易。这个答案在于CPU是如何组织存储的,以及它是如何优化你的代码的。 ...
C++ 语言
64,648
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章