加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

Windows临界区的用法

发布时间:2021-03-05 06:10:14 所属栏目:系统 来源:网络整理
导读:一、Windows临界区的基本用法 CRITICAL_SECTION my_winsc;? ? ? ? ? ? ? //定义一个Windows的临界区,相当于一个mutex变量 InitializeCriticalSection(my_winsc);? ? ? ? //初始化 EnterCriticalSection(my_winsc);? ? ? ? ? ? //进入临界区,相当于lock()

一、Windows临界区的基本用法

CRITICAL_SECTION my_winsc;? ? ? ? ? ? ? //定义一个Windows的临界区,相当于一个mutex变量

InitializeCriticalSection(&my_winsc);? ? ? ? //初始化

EnterCriticalSection(&my_winsc);? ? ? ? ? ? //进入临界区,相当于lock()

LeaveCriticalSection(&my_winsc);? ? ? ? ??//离开临界区,相当于unlock()

线程thread_1打印1-50,线程thread_2打印51-100

 1 #include <iostream>
 2 #include <Windows.h>
 3 #include <thread>
 4 using namespace std;
 5 
 6 int Count = 0;
 7 CRITICAL_SECTION my_winsc;              //定义一个Windows的临界区,相当于mutex
 8 
 9 void mythead_1()
10 {
11     for (int i = 0; i < 50; i++)
12     {
13         EnterCriticalSection(&my_winsc);  //进入临界区,相当于lock()
14         EnterCriticalSection(&my_winsc);  //进入临界区,相当于lock()
15         Count++;
16         cout << std::this_thread::get_id() << "线程:" << Count << endl;
17         LeaveCriticalSection(&my_winsc);  //离开临界区,相当于unlock()
18         LeaveCriticalSection(&my_winsc);  //离开临界区,相当于unlock()
19     }
20 }
21 
22 void mythread_2()
23 {
24     for (int i = 0; i < 50; i++)
25     {
26         EnterCriticalSection(&my_winsc);
27         Count++;
28         cout << std::this_thread::get_id() << "线程:" << Count << endl;
29         LeaveCriticalSection(&my_winsc);
30     }
31 }
32 
33 
34 int main()
35 {
36     
37     InitializeCriticalSection(&my_winsc);   //初始化
38     thread thread_1(mythead_1);
39     thread thread_2(mythread_2);
40     thread_1.join();
41     thread_2.join();
42 
43 
44     system("pause");
45     return 0;
46 }

二、Windows临界区与mutex的不同

1.mutex是独立互斥量,临界区是递归的独立互斥量,对比前面的第五章节,发现同一个线程入口函数只能lock一次,如果多次就会死锁,但是在例子可以使用多次加锁,只需对应的解锁相应次数就行

2.Windows临界区必须初始化

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读