线程同步问题,CRITICAL_SECTION和Mutex哪个更快

 
     
     
书上说CRITICAL_SECTION比Mutex要快,但是我的一个程序里使用CRITICAL_SECTION比使用Mutex要慢很多,要保护的资源是一个std::queue,有两个线程对这个队列操作,一个往里边放,另一个从队列里取数据,不知道是不是我的用法有问题,哪位能给个例子,多谢!
hyeenahowy二级(初级) 信誉:992005-9-13 14:33:50得分: 0
 
                  
         
         
自己顶!
Top
zhaoriyuesam二级(初级) 信誉:1002005-9-13 15:00:24得分: 0
 
                  
         
         
因为mutex对象都是内核对象, 对其操作均需要由用户态切换到系统态,关键代码段则不需要.故对mutex的操作会比较费时. 但这不意味着你的程序总体执行速度和对mutex对象的操作性能成正比. 个人浅见.
Top
jason_wentzel 一级(初级) 信誉:1002005-9-13 15:04:41得分: 5
 
                  
         
         
定义、初始化: CRITICAL_SECTION CRITICAL_ALARM_INDEX; InitializeCriticalSection( &CRITICAL_ALARM_INDEX); 线程A(读): A() { EnterCriticalSection(&m_pDialogList1->CRITICAL_ALARM_INDEX); // 你要保护的资源 LeaveCriticalSection(&m_pDialogList1->CRITICAL_ALARM_INDEX); } 线程B(写): B() { EnterCriticalSection(&m_pDialogList1->CRITICAL_ALARM_INDEX); // 你要保护的资源 LeaveCriticalSection(&m_pDialogList1->CRITICAL_ALARM_INDEX); }
Top
hyeenahowy二级(初级) 信誉:992005-9-13 15:20:32得分: 0
 
                  
         
         
对啊,我就是这么做的,但是如果把EnterCriticalSection/LeaveCriticalSection,换成WaitForSingleObject/ReleaseMutex,使用Mutex的话却比使用CRITICAL_SECTION要来的快,而且快几十秒,这会是什么问题呢?
Top
alen_ghl东方求*一级(初级) 信誉:1002005-9-13 15:38:58得分: 0
 
                  
         
         
楼上正解 不过还不明白CCriticalSection与CRITICAL_SECTION区别 有谁说下
Top
danscort2000带鱼丝考三级(初级) 信誉:972005-9-13 15:51:01得分: 5
 
                  
         
         
CCriticalSection 快, 这里面有个原子的问题, 以前我做个测试的, CCriticalSection是个用户层的原子操作,不需要进行内核切换, 而其他的如MUTEX,EVENT,SEAMPHORE等都是内核对象,操作的时候首先要进行内核切换。 出现EVENT比CRITICAL SECTION快,一般是在DEBUG模式下, 、但是转到RELEASE模式后,速度就很明显是CRITICAL快了, 当然, 你也可以使用 _disable( ) _enable( ) 来操作,那连系统切换中断都不会,速度吓人
Top
DentistryDoctorMy heart will fly,in the sky.两星(中级) 信誉:1822005-9-13 16:37:38得分: 0
 
                  
         
         
CCriticalSection是对CRITICAL_SECTION的封装。
Top
hyeenahowy二级(初级) 信誉:992005-9-13 20:51:08得分: 0
 
                  
         
         
_disable instructs the processor to clear the interrupt flag. On x86 systems, this function generates the Clear Interrupt Flag (cli) instruction. On IPF systems, this function generates the Reset System Mask (rsm) instruction with an argument that clears the interrupt control flag. This function is only available in kernel mode. If used in user mode, a Privileged Instruction exception
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值