📄 4 种进程或线程同步互斥的控制方法 -- asp酷技术网.htm
字号:
0;i<256;i++) <BR> { <BR>
global_Array[i]=O; <BR>
ptr->SetWindowText(global_Array); <BR> Sleep(10);
<BR> } <BR> //回置事件 <BR>
SetEvent(global_Events[0]); <BR> return 0;
<BR> } <BR> <BR> UINT
Global_ThreadTwo(LPVOID pParam) <BR> { <BR>
CEdit *ptr=(CEdit *)pParam; <BR>
ptr->SetWindowText(""); <BR> for(int i =
0;i<256;i++) <BR> { <BR>
global_Array[i]=T; <BR>
ptr->SetWindowText(global_Array); <BR> Sleep(10);
<BR> } <BR> //回置事件 <BR>
SetEvent(global_Events[1]); <BR> return 0;
<BR> } <BR> <BR> UINT
Global_ThreadThree(LPVOID pParam) <BR> { <BR>
CEdit *ptr=(CEdit *)pParam; <BR>
ptr->SetWindowText(""); <BR> //等待两个事件都被回置
<BR> WaitForMultipleObjects(2, global_Events, true,
INFINITE); <BR> for(int i = 0;i<256;i++)
<BR> { <BR> global_Array[i]=H;
<BR> ptr->SetWindowText(global_Array);
<BR> Sleep(10); <BR> } <BR>
return 0; <BR> } <BR> void
CEventDlg::OnBnClickedButtonStart() <BR> {
<BR> for (int i = 0; i < 2; i++) <BR> {
<BR> //实例化事件 <BR>
global_Events[i]=CreateEvent(NULL,false,false,NULL);
<BR> } <BR> CWinThread *ptrOne =
AfxBeginThread(Global_ThreadOne, <BR> &m_One,
<BR> THREAD_PRIORITY_NORMAL, <BR> 0,
<BR> CREATE_SUSPENDED); <BR>
ptrOne->ResumeThread(); <BR> <BR> //Start
the second Thread <BR> CWinThread *ptrTwo =
AfxBeginThread(Global_ThreadTwo, <BR> &m_Two,
<BR> THREAD_PRIORITY_NORMAL, <BR> 0,
<BR> CREATE_SUSPENDED); <BR>
ptrTwo->ResumeThread(); <BR> <BR> //Start
the Third Thread <BR> CWinThread *ptrThree =
AfxBeginThread(Global_ThreadThree, <BR> &m_Three,
<BR> THREAD_PRIORITY_NORMAL, <BR> 0,
<BR> CREATE_SUSPENDED); <BR>
ptrThree->ResumeThread(); <BR> // TODO: Add your
control notification handler code here <BR> }
<BR> 事件可以实现不同进程中的线程同步操作,并且可以方便的实现多个线程的优先比较等待操作,例如写多个WaitForSingleObject来代替WaitForMultipleObjects从而使编程更加灵活。
<BR> 程序运行结果 <BR> <IMG
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/14_235422_roguev.jpg">
<BR> 总结: <BR> 1.
互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
<BR> 2.
互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以可以使用WaitForSingleObject来等待进程和线程退出。
<BR> 3.
通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。
<BR> 疑问: <BR> 在 Linux 上,有两类信号量。第一类是由
semget/semop/semctl API 定义的信号量的 SVR4(System V Release 4)版本。第二类是由
sem_init/sem_wait/sem_post/interfaces 定义的 POSIX 接口。 它们具有相同的功能,但接口不同。
在2.4.x内核中,信号量数据结构定义为(include/asm/semaphore.h)。
<BR> 但是在Linux中没有对互斥量的具体提法,只是看到说互斥量是信号量的一种特殊情况,当信号量的最大资源数=1同时可以访问共享资源的线程数=1
就是互斥量了。临界区的定义也比较模糊。没有找到用事件处理线程/进程同步互斥的操作的相关资料。在Linux下用GCC/G++编译标准C++代码,信号量的操作几乎和Windows下VC7的编程一样,不用改多少就顺利移植了,可是互斥量,事件,临界区的Linux移植没有成功。
<BR> <BR> 本文所有事例程序在WindowsXp Sp2 + VC7
下编译通过 <BR> 您不太同意本文的一些看法和观点, 您想说两句:
<BR> http://www.zhangsichu.com/blogview.asp?Content_Id=14#postComment
做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 <BR>
<P></P></TD></TR></TBODY></TABLE><!--Start: 1kTag.com Ads --><IFRAME
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/CAOHQ7GL.htm" frameBorder=0
width=560 scrolling=no height=70></IFRAME><!--End: 1kTag.com Ads -->
<SCRIPT src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/shoucang.js"></SCRIPT>
<TABLE cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffcc99
border=0><TBODY>
<TR>
<TD height=24>
<CENTER>相关文章</CENTER></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=1 cellPadding=0 width="100%" align=top bgColor=#ffffcc
border=0>
<TBODY>
<TR>
<TD vAlign=top width="50%">前1篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=1248&bbsuser=csharp"
target=_blank>数据结构与算法(C#实现)系列---树(三)</A> <BR>前2篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=1247&bbsuser=csharp"
target=_blank>数据结构与算法(C#实现)系列---树(二)</A> <BR>前3篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=1246&bbsuser=csharp"
target=_blank>数据结构与算法(C#实现)系列---树(一)</A> <BR>前4篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=1245&bbsuser=csharp"
target=_blank>ASP.net 验证码(C#)</A> <BR></TD>
<TD vAlign=top width="50%">后1篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=1253&bbsuser=csharp"
target=_blank>将拖拽进行到底</A> <BR>后2篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=3068&bbsuser=csharp"
target=_blank>C# 3.0新特性体验之Lambda表达式</A> <BR>后3篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=3069&bbsuser=csharp"
target=_blank>Visual C#程序员面试基础问题和答案</A> <BR>后4篇 <A
href="http://www.aspcool.com/lanmu/dot.asp?ID=3070&bbsuser=csharp"
target=_blank>C# 3.0 新特性:扩展方法初探(1)</A> <BR></TD></TR></TBODY></TABLE><BR>
<CENTER><A
href="http://www.aspcool.com/lanmu/republic.asp?ID=1252&bbsuser=csharp&motive=4"
种进程或线程同步互斥的控制方法>发表评论</A>
<A
href="http://www.aspcool.com/lanmu/register.asp">注册新用户</A></CENTER><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" bgColor=#ff8080
border=0><TBODY>
<TR>
<TD width="50%" height=24>
<CENTER>对该文的评论</CENTER></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=768 bgColor=#ffe7ce border=0>
<TBODY>
<TR>
<TD>
<P align=right><A href="http://www.aspcool.com/">返回首页</A> <A
href="javascript:window.close()">关闭窗口</A></P></TD></TR></TBODY></TABLE>
<TABLE height=27 cellSpacing=0 cellPadding=0 width=768 border=0>
<TBODY>
<TR bgColor=#c4ecff>
<TD width="100%">
<P align=left><STRONG><FONT color=#6f6fb7> 导航</FONT></STRONG>
>> <A href="http://www.aspcool.com/">ASP酷首页</A>-<A
href="http://www.chaxiu.com/">茶秀互动社区</A>-<A
href="http://blog.aspcool.com/">酷网博客</A>-<A
href="http://zhai.aspcool.com/">茶秀网摘</A>- <A
href="http://bbs.aspcool.com/">酷网论坛</A> -<A
href="http://www.aspcool.com/lanmu/browse.asp?bbsuser=csharp">
csharp专栏</A> </P></TD></TR></TBODY></TABLE><BR>
<SCRIPT language=JavaScript1.1
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/adleft.js"></SCRIPT>
<SCRIPT language=JavaScript
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/adright.js"></SCRIPT>
<TABLE class=borderMain style="BORDER-TOP: #ffffff 2px solid" cellSpacing=0
cellPadding=0 width=778 align=center bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle bgColor=#ffffff><A
href="http://www.aspcool.com/webdev" target=_blank><IMG height=50
alt=酷网动力,中国ASP.NET网站开发门户,承接各类ASP/ASP.NET网站开发项目。
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/banner_768_50.gif" width=768
border=0></A></TD></TR></TBODY></TABLE>
<TABLE class=borderMain style="BORDER-TOP: #ffffff 5px solid" cellSpacing=0
cellPadding=0 width=778 align=center bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle bgColor=#cccccc height=5></TD></TR>
<TR>
<TD vAlign=top align=middle bgColor=#3f4871 height=5></TD></TR></TBODY></TABLE>
<TABLE class=borderMain style="BORDER-TOP: #ffffff 2px solid" cellSpacing=0
cellPadding=0 width=778 align=center bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle bgColor=#ffffff>
<P><A href="http://www.aspcool.com/about.asp">关于本站<A> - <A
href="http://www.aspcool.com/ads.asp">广告联系<A> - <A
href="http://bbs.aspcool.com/">技术论坛<A> - <A
href="http://www.aspcool.com/help.asp">使用说明<A> - <A
href="http://www.aspcool.com/copyright.asp">版权说明<A> - <A
href="http://www.aspcool.com/link.asp">联系方式<A>
<P class=page
align=center>本站承接域名注册、虚拟主机、ASP/ASP.NET网站开发和广告投放等业务。<BR>地址:西安市电子二路72号锦业大厦10层B室
邮编:710065 <BR>联系方式:<IMG height=16
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/contacttel.gif" width=16
border=0>029-88260868 <IMG height=20
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/contactmt.gif" width=20
border=0>13772001052 联系QQ:<A title=点击进行交谈
href="http://wpa.qq.com/msgrd?V=1&Uin=580076&Site=aspcool.cn&Menu=yes"
target=_blank><IMG alt=点击发送消息给对方
src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/qq1_offline.gif"
border=0>580076</A> 联系人:王先生<BR><BR>© 2004-2005 版权所有 <A
href="http://www.aspcool.com/" target=_blank>酷网动力</A>(<A
href="http://www.aspcool.com/" target=_blank>http://www.aspcool.com/</A>)
<BR><A href="http://www.miibeian.gov.cn/" target=_blank>陕ICP备05003615号</A>
</P></TD></TR></TBODY></TABLE><SPAN id=span_ad_760x60_top>
<SCRIPT src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/LoadAds.js"></SCRIPT>
</SPAN>
<SCRIPT>ad_760x60_top.innerHTML=span_ad_760x60_top.innerHTML;span_ad_760x60_top.innerHTML="";</SCRIPT>
<SCRIPT language=javascript src="4 种进程或线程同步互斥的控制方法 -- ASP酷技术网.files/506172.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><A href="http://www.51.la/?506172" target=_blank><IMG
style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"
alt=我要啦免费统计 src=""></A></NOSCRIPT> </CENTER></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -