⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_66760.htm

📁 vc
💻 HTM
字号:
<p>
序号:66760 发表者:badboy 发表日期:2003-12-26 12:29:18
<br>主题:关于临界区(非内核对象)、互斥器、信号量、事件这几个同步对象的区别与选
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;这几个同步对象有区别也因此各有用处。不过,互斥器要比临界区好,临界区很可能因为一个线程的死掉而让其他线程挂了(僵而不死)。互斥器可以泥补这个缺点。 既然这么好,那谁还用临界区?<BR>&nbsp;&nbsp; 信号量如果资源计数为1的话,就是一个互斥器,不过,互斥器有个特性,就是当线程拥有互斥器以后,在没有释放掉互斥器就结束了。这时,系统就会强行释放互斥器使其变为有信号(或称激发状态)。由于这个特殊原因,看来,信号量取代不了互斥器。因为我一直在琢磨,互斥器存在的价值。<BR>&nbsp;&nbsp;而事件与前几个不同,前几个主要是为了保护全局变量的,而事件是为了控制线程的执行时机。比如两个线程交替干某件事情!<BR>&nbsp;&nbsp;综合起来看,只有临界区可以被取代。<BR><BR>&nbsp;&nbsp; 我的看法对吗?&nbsp;&nbsp;帮我看看!谢谢!<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:bbsbbs2003 回复日期:2003-12-26 12:32:13
<br>内容:建议你看一下<BR>http://wwwb.pconline.com.cn/pcedu/empolder/gj/vc/doc/10824_2.htm
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:xiongli 回复日期:2003-12-26 12:56:07
<br>内容:critical section<BR>最大的优点就是效率高.它的效率比其他几种内核对象高三个数量级以上.这就是他最大的优点.他最大的缺点就是不能跨进程.<BR>所以在进程内的同步控制,能用critical section就尽量用.<BR><BR>而互斥体,信号量,事件这三个东西本质上都是一样的.他们只是在外载形式和功能上有区别,分别适合不同的环境.只要通过其中一个,就可以自己实现出两外两个.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:badboy 回复日期:2003-12-27 20:17:52
<br>内容:楼上的哥们:<BR>“&nbsp;&nbsp;&nbsp;&nbsp;进程内的同步控制,能用critical section就尽量用. ”<BR><BR>&nbsp;&nbsp;可critical section不是内核对象,所以就不能调用wait…函数。所以线程只能不断的探测是否critical section可用,那就得用while循环吧。而互斥器则不用额外的非常耗费CPU时间的while循环来探测,而是用waitForSingleOBject()等函数来探测互斥器是否被线程所占有。<BR>&nbsp;&nbsp;另外,当线程进入了critical section以后因为某种原因线程被KILL了,那线程就再也没有机会离开critical section了。假如其他线程此时在等待这个critical section,那可就死锁了。而互斥器则不然,操作系统会强行改变互斥器的状态而让其他线程有机会得到互斥器。从而防止死锁!<BR>&nbsp;&nbsp;&nbsp;&nbsp; 另外,信号量可同时监管多个被保护数据,也是互斥器无法比的。你即使能实现那个功能,恐怕效率上也不会太好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;最后我觉得事件不是来保护数据用的!所以我认为和另外的几个不同!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-12-27 22:33:25
<br>内容:建议你再详细看看critical section里面的介绍<BR>当你enter critical section的时候,如果你请求的section没有释放,那么当前线程就会进入挂起状态,根用waitforsingleobject一样的.并不是非要wait函数才可以挂起。<BR><BR>对于信号量,互斥体等等,可以参考相关介绍操作系统原理的书籍。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -