例子:记录线程调用顺序

#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;#define THREADCOUNT 9CRITICAL_SECTION  testCS;
DWORD WINAPI ThreadFunc( LPVOID );
std::vector<int> orderVec;//记录线程调用顺序
int main( void )
{HANDLE aThread[THREADCOUNT];DWORD ThreadID;int i;InitializeCriticalSection(&testCS);// Create worker threadsfor( i=0; i < THREADCOUNT; i++ ){aThread[i] = CreateThread( NULL,       // default security attributes0,          // default stack sizeThreadFunc, //(LPTHREAD_START_ROUTINE) (LPVOID)i,       // no thread function arguments0,          // default creation flags&ThreadID); // receive thread identifier}Sleep(100);for( i=0; i < THREADCOUNT; i++ )CloseHandle(aThread[i]);int count = orderVec.size();cout << " order of calling thread:";for (int i=0; i<count; ++i){cout << orderVec[i] << ", ";}DeleteCriticalSection(&testCS);system("pause");return 0;
}DWORD WINAPI ThreadFunc( LPVOID lpParam )
{ //如果不加临界区 vector.push_back操作可能中途被打断 出现错误EnterCriticalSection(&testCS);int i = (int)lpParam;orderVec.push_back(i);LeaveCriticalSection(&testCS);return TRUE;
}

结果:

order of calling thread:0, 1, 2, 4, 5, 3, 7, 6, 8, 请按任意键继续. . .

InitializeCriticalSection function

初始化一个临界区对象

void WINAPI InitializeCriticalSection(

_Out_  LPCRITICAL_SECTION lpCriticalSection

);

参数

lpCriticalSection [out]

指向临界区对象的指针

注意

单进程中的线程可以使用临界界对象来解决青互斥同步问题。但不保证线程得到临界区对象的顺序,系统公平对待每个线程。进程负责为临界区对象分配内存。即定义一个类型为CRITICAL_SECTION变量。在使用临界区对象之前,进程中的线程必须初始化临界区对象。在临界区对象初始化之后,线程可以使用函数EnterCritical TryEnterCriticalSection或LeaveCriticalSection函数来互斥地访问共享资源。在不同进程中的线程同步,可以使用mutex对象。

临界区对象不能被移动,也不能被复制。进程不能修改临界区对象,但这是不符合逻辑的。只能使用临界区函数管理临界区对象。当你想结束一个临界区对象时,调用DeleteCriticalSection函数。

在重新初始化临界区对象之前,临界区对象必须被删除。初始化一个已经初始化的临界区对象,结果是未知的。

临界区例子及相关函数翻译相关推荐

  1. mysql配置文件简易代码_MySQL配置文件my.cnf 例子最详细翻译

    转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负 ...

  2. mysql 初始化my.cnf_MySQL配置文件my.cnf 例子最详细翻译

    转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO #DESCR: 4GB RAM,只使用InnoDB,ACID,少量的连接,队列负载大 # ...

  3. 官方完整HL7 ECG-XML例子及注释翻译(1)

    编者:李国帅 qq:9611153 微信lgs9611153 时间:2019-7-4 背景: 存储心电图数据的格式有很多种,比如HL7,Dicom,EDF,GDF等,其中HL7最是简单,直观,使用Xm ...

  4. 观点 | 朱靖波:辅助翻译技术需「以人为本」

    观点 | 朱靖波:辅助翻译技术需「以人为本」 2020-04-20 00:11:50 编者按:朱靖波教授是小牛翻译创始人.东北大学计算机学院教授,为国内外著名的机器翻译学者.在本文中,朱靖波教授反思了 ...

  5. The Illustrated Transformer:中英文(看原文,很多翻译是错误的)

    在上一篇文章中(previous post),我们研究了注意力机制 - 一种在现代深度学习模型中无处不在的(ubiquitous)方法. 注意力是一个有助于提高神经机器翻译(neural machin ...

  6. scala中akka actor例子

    抛开复杂的业务逻辑,让我们从一个超级简单的例子学习Akka Actor的用法. Scala cookbook的作者Alvin Alexander在他的网站上提供了两个例子. 本文翻译.整理于他的两篇文 ...

  7. AsyncDisplayKit官方文档个人翻译

    迁移老文章到掘金 文档比较老了,不适用最新的2.0 AsyncDisplayKit 官方文档 最近在拆解学习AsyncDisplayKit这个很知名的轮子,发现这个轮子内容还是非常庞大的,想要分解学习 ...

  8. 人工智能翻译之间的对决:谷歌为什么败给了有道?

    由于人工智能的飞速发展,机器翻译水平正在大幅提升,并逐渐赶超人类,这已经是不争的事实.然而,同在机器翻译这个赛道里的各位"赛手",谷歌.有道等传统翻译产品或公司,也正在上演着一场激 ...

  9. 论文翻译-Scene Text Detection and Recognition: The Deep Learning Era

    论文翻译-Scene Text Detection and Recognition: The Deep Learning Era 原文地址:https://arxiv.org/pdf/1811.042 ...

最新文章

  1. android getitem,android – ItemDecoration重写getItemOffsets()和动画
  2. 5种处理js跨域问题方法汇总(转载)
  3. servlet——登录练习(登录页面登录请求登录请求处理)
  4. ob服务器维修视频,教你如何使用OB系统 还在看转播?你OUT了!
  5. java get 空指针_Java 中空指针处理方法
  6. linux7 语言包,Centos 7中文语言包的安装及中文支持
  7. 兼容性记录-class属性
  8. java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法
  9. android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法
  10. RANDOM模块:PYTHON获取随机数
  11. BT5新的征程!全民***计划!
  12. cr2格式缩略图不显示_cr2缩略图补丁 佳能相机RAW文件CR2原片格式缩略图显示补丁- 游侠下载站...
  13. 魔兽世界单机版(模拟器)入门介绍--Starting off with WoW Emulation. 翻译
  14. 《地理信息系统概论》课后习题全部答案_黄杏元
  15. 计算机用户密码怎么查看,怎么查看电脑开机密码【具体阐明】
  16. python程序写诗_用Python光速为你写诗
  17. 铁甲小宝像车轮的是什么机器人_铁甲小宝里的机器人都叫什么名字啊
  18. 关于文件你必须了解的一些基本概念
  19. poe工业以太网交换机可以当普通交换机用吗,poe工业以太网交换机有哪些优势
  20. 长沙理工大学ACMore编程协会2018年新生赛(重现赛)

热门文章

  1. 混合云的落地,需要解决哪些问题?
  2. win10官方iso镜像下载教程
  3. 斗鱼弹幕服务器第三方接入协议,GitHub - qianjiachun/douyu-point: 为你的斗鱼直播间增加积分功能吧!...
  4. caffe深度学习框架入门
  5. 1到50中7的倍数的数值之和
  6. 第一章 教育基础(03 教育目的与教育制度)
  7. 十进制转为K进制代码的实现
  8. BXL文件怎样转换为AD LIB文件
  9. 微信小程序 日期比较,计算天数
  10. Vue+SpringBoot介绍