Windows临界区的用法
发布时间:2020-12-14 05:49:06 所属栏目:Windows 来源:网络整理
导读:一、Windows临界区的基本用法 CRITICAL_SECTION my_winsc;? ? ? ? ? ? ? //定义一个Windows的临界区,相当于一个mutex变量 InitializeCriticalSection(my_winsc);? ? ? ? //初始化 EnterCriticalSection(my_winsc);? ? ? ? ? ? //进入临界区,相当于lock() L
一、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临界区必须初始化 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 将列添加到CSV Windows PowerShell
- 通过PowerShell访问MSMQ
- windows-server-2008 – Windows Server 2008 R2 – 如何更
- 如何正确使用SetWindowsHookEx和CallNextHookEx
- windows-server-2008 – 如何创建Hyper-V内部网络
- windows – 是否可以从终端服务远程应用程序本地运行程序?
- windows – 如何同步安装MSI?
- 图解 -- Win10 OpenSSH
- “init在do_boot中终止”Windows 8.1 Rabbit MQ无法启动
- Windows 8 Phone上的USB远程调试
推荐文章
站长推荐
- 2019年最新win10专业版教育版1903版本激活密钥和
- windows-7 – Windows 7 RC是否在虚拟机上运行?
- Windows – 如何在DOS的ftp模式下查看Unix中的文
- windows下部署Tomcat8
- active-directory – Windows 7 Trust问题
- windows-vista – 在Vista上的Windows Installer
- windows – 可以在没有浏览器插件的情况下安装ja
- 在windows上添加ssh到PATH,我该怎么写?
- Windows服务 – 无法在WiX安装程序中安装和启动W
- window – 在PyGTK中创建RGBA Colormap
热点阅读