Windows多线程同步系列之二-----关键区

关键区对象为:CRITICAL_SECTION 当某个线程进入关键区之后,其他线程将阻塞等待,知道该线程释放关键区的拥有权。

 

 

关键区同步主要有以下几个API

初始化关键区对象,无返回值,传入一个关键区对象的指针。

 

 

该函数在使用完关键区之后删除关键区对象,无返回值,同样传入一个关键区对象指针

 

 

 

该函数为进入关键区函数,传入的参数为关键区对象指针,无返回值。如果另外一个线程正拥有关键区的所有权,那么该函数

将阻塞,直到其他线程释放关键区的所有权之后,该函数才能继续执行进入关键区。

 

 

 

该函数与EnterCriticalSection正好相反,EnterCriticalSection是获取关键区所有权进入关键区,LeaveCriticalSection是释放

关键区所有权,离开关键区。

 

我们下面还是继上一文多线程同步系列之一-----互斥对象中同步卖票的例子进行续写

 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4 static int number=10;
 5 CRITICAL_SECTION CriticalSection;
 6 
 7 DWORD WINAPI ThreadOne(LPVOID lpParameter)
 8 {
 9     printf("窗口1售票开始:\n");
10     while(1)
11     {
12         EnterCriticalSection(&CriticalSection);  
13         if(number>0)
14         {
15             printf("窗口1售出第%d张票...\n",number);
16             number--;
17             Sleep(1000);        
18         }
19         LeaveCriticalSection(&CriticalSection);
20         Sleep(100);
21     }
22     return 0;
23 }
24 DWORD WINAPI ThreadTwo(LPVOID lpParameter)
25 {
26     printf("窗口2售票开始:\n");
27     while(1)
28     {
29         EnterCriticalSection(&CriticalSection);
30         if(number>0)
31         {
32             printf("窗口2售出第%d张票...\n",number);
33             Sleep(1000);
34             number--;
35         }
36         LeaveCriticalSection(&CriticalSection);
37         Sleep(100);
38     }
39     return 0;
40 }
41 
42 
43 int main()
44 {
45     HANDLE HOne,HTwo;
46     InitializeCriticalSection(&CriticalSection);
47     printf("***********************vpoet******************\n");
48     HOne=CreateThread(NULL,0,ThreadOne,NULL,0,NULL);
49     HTwo=CreateThread(NULL,0,ThreadTwo,NULL,0,NULL);
50     CloseHandle(HOne);
51     CloseHandle(HTwo);
52     while(TRUE)
53     {
54         if(number==0)
55         {
56             printf("不好意思,票卖完了!\n");
57             DeleteCriticalSection(&CriticalSection);
58             return 0;
59         }
60         else
61         {
62             continue;
63         }    
64     }
65     
66     return 0;
67 }

 

运行截图:

 

posted @ 2015-07-29 14:57  vpoet  阅读(534)  评论(0编辑  收藏  举报