<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; wesleyluo</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/wesleyluo/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>多线程同步的三种方法-互斥量-事件对象-关键代码段 (临界区)</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/06/24/400008112/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/06/24/400008112/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 08:59:45 +0000</pubDate>
		<dc:creator>wesleyluo</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/06/24/400008112/</guid>
		<description><![CDATA[  1.使用互斥量与事件对象实现线程同步的例子代码： view plaincopy to clipboardprint? #include #include using namespace std; DWORD WINAPI Fun1Proc_dd(LPVOID lpParameter); DWORD WINAPI Fun2Proc_dd(LPVOID lpParameter); int index = 0; int tickets_dd = 100; HANDLE hMutex; HANDLE hEvent; void main_dd(int argc, char **argv) { HANDLE hThread1; HANDLE hThread2; //互斥量 /*hMutex = CreateMutex(NULL, FALSE, "test"); if (hMutex) { if (ERROR_ALREADY_EXISTS == GetLastError()) { [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>1.使用互斥量与事件对象实现线程同步的例子代码：</p>
<p>view plaincopy to clipboardprint?<br />
#include<br />
#include</p>
<p>using namespace std;</p>
<p>DWORD WINAPI Fun1Proc_dd(LPVOID lpParameter);<br />
DWORD WINAPI Fun2Proc_dd(LPVOID lpParameter);</p>
<p>int index = 0;<br />
int tickets_dd = 100;<br />
HANDLE hMutex;<br />
HANDLE hEvent;</p>
<p>void main_dd(int argc, char **argv)<br />
{</p>
<p>HANDLE hThread1;<br />
HANDLE hThread2;</p>
<p>//互斥量<br />
/*hMutex = CreateMutex(NULL, FALSE, "test");<br />
if (hMutex)<br />
{<br />
if (ERROR_ALREADY_EXISTS == GetLastError())<br />
{<br />
cout &lt;&lt; "only one instance can run!" &lt;&lt; endl;<br />
return;<br />
}<br />
}*/<br />
hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);</p>
<p>if (hEvent)<br />
{<br />
if (ERROR_ALREADY_EXISTS == GetLastError())<br />
{<br />
cout &lt;&lt; "Only one instance can run!" &lt; 0)<br />
{<br />
Sleep(1);<br />
cout &lt;&lt; "thread1_dd sell ticket: " &lt;&lt; tickets_dd-- &lt; 0)<br />
{<br />
Sleep(1);<br />
cout &lt;&lt; "thread2_dd sell ticket: " &lt;&lt; tickets_dd-- &lt;&lt; endl;<br />
SetEvent(hEvent);<br />
}<br />
else<br />
{<br />
SetEvent(hEvent);<br />
break;<br />
}<br />
//ReleaseMutex(hMutex);<br />
}</p>
<p>return 0;<br />
}</p>
<p>2.使用关键代码段实现线程同步的例子代码：</p>
<p>view plaincopy to clipboardprint?<br />
#include<br />
#include</p>
<p>using namespace std;</p>
<p>DWORD WINAPI Fun1Proc(LPVOID lParameter);<br />
DWORD WINAPI Fun2Proc(LPVOID lParameter);</p>
<p>CRITICAL_SECTION g_cs;</p>
<p>int tickets = 100;</p>
<p>int main()<br />
{<br />
HANDLE hThread1;<br />
HANDLE hThread2;</p>
<p>hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);<br />
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);<br />
CloseHandle(hThread1);<br />
CloseHandle(hThread2);</p>
<p>//初始化关键代码段<br />
InitializeCriticalSection(&amp;g_cs);<br />
Sleep(4000);<br />
//使用完毕删除关键代码段<br />
DeleteCriticalSection(&amp;g_cs);</p>
<p>return 0;<br />
}</p>
<p>DWORD WINAPI Fun1Proc(LPVOID lParameter)<br />
{</p>
<p>while (TRUE)<br />
{<br />
//进入关键代码段，如果被人占用则一直等待<br />
EnterCriticalSection(&amp;g_cs);<br />
Sleep(1);<br />
if (tickets &gt; 0)<br />
{<br />
cout &lt;&lt; "thread1 sell ticket : " &lt;&lt; tickets-- &lt; 0)<br />
{<br />
cout &lt;&lt; "thread2 sell ticket : " &lt;&lt; tickets-- &lt;&lt; endl;<br />
LeaveCriticalSection(&amp;g_cs);<br />
}<br />
else<br />
{<br />
LeaveCriticalSection(&amp;g_cs);<br />
break;<br />
}<br />
}<br />
return 0;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/06/24/400008112/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

