一、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

 #include <iostream>
#include <Windows.h>
#include <thread>
using namespace std; int Count = ;
CRITICAL_SECTION my_winsc; //定义一个Windows的临界区,相当于mutex void mythead_1()
{
for (int i = ; i < ; i++)
{
EnterCriticalSection(&my_winsc); //进入临界区,相当于lock()
EnterCriticalSection(&my_winsc); //进入临界区,相当于lock()
Count++;
cout << std::this_thread::get_id() << "线程:" << Count << endl;
LeaveCriticalSection(&my_winsc); //离开临界区,相当于unlock()
LeaveCriticalSection(&my_winsc); //离开临界区,相当于unlock()
}
} void mythread_2()
{
for (int i = ; i < ; i++)
{
EnterCriticalSection(&my_winsc);
Count++;
cout << std::this_thread::get_id() << "线程:" << Count << endl;
LeaveCriticalSection(&my_winsc);
}
} int main()
{ InitializeCriticalSection(&my_winsc); //初始化
thread thread_1(mythead_1);
thread thread_2(mythread_2);
thread_1.join();
thread_2.join(); system("pause");
return ;
}

二、Windows临界区与mutex的不同

1.mutex是独立互斥量,临界区是递归的独立互斥量,同一个mutex互斥量在一个线程入口函数只能lock一次,但是在本例中可以多次进入临界区,即可以使用多次加锁,只需对应的解锁相应次数就行了

2.Windows临界区必须初始化

最新文章

  1. mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储
  2. Java Hashtable的实现
  3. shell--2.shell数组
  4. 查询sql2005&amp;2008全部表信息
  5. R语言获取国内的股票数据
  6. SpringMVC学习笔记(二)
  7. MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC (转)
  8. 【hadoop2.6.0】利用JAVA API 实现数据上传
  9. E - 最短的名字
  10. python3使用PyMysql连接mysql数据库
  11. [codevs2230]黑白棋子
  12. oracle plsql 64位 32位连接未打开 无法解析各种错终极解决方案
  13. PHP mysql查询工具
  14. java.net.UnknownHostException: master
  15. redis出现错误:NOAUTH Authentication required.
  16. 自学Zabbix4.1 zabbix监控web服务器访问性能
  17. 关于HBase Shell命令基本操作示例
  18. Python tuple 函数
  19. Android——适配器其他组件(AutoCompleteTextView:自动完成文本编辑框;Spinner:下拉列表)
  20. HDU1575:Tr A(矩阵快速幂模板题)

热门文章

  1. 汇编语言学习-Dos下的调试工具debug的使用教程
  2. window.innerHeight与document.documentElement.clientHeight与document.body.clientHeight区别
  3. ICEM—八分之一球(2D转3D)
  4. Java中常见的集合类比较
  5. storm java环境变量设置
  6. mysql 给用户设置权限
  7. 【思考】为什么说Bagging减少variance,Boosting减少bias?(转载)
  8. C# 去除所有的html标签
  9. Qt开发经验小技巧合集
  10. jExcelAPI 操作 Excel 文件