临界区例子及相关函数翻译
例子:记录线程调用顺序
#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函数。
在重新初始化临界区对象之前,临界区对象必须被删除。初始化一个已经初始化的临界区对象,结果是未知的。
临界区例子及相关函数翻译相关推荐
- mysql配置文件简易代码_MySQL配置文件my.cnf 例子最详细翻译
转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负 ...
- mysql 初始化my.cnf_MySQL配置文件my.cnf 例子最详细翻译
转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO #DESCR: 4GB RAM,只使用InnoDB,ACID,少量的连接,队列负载大 # ...
- 官方完整HL7 ECG-XML例子及注释翻译(1)
编者:李国帅 qq:9611153 微信lgs9611153 时间:2019-7-4 背景: 存储心电图数据的格式有很多种,比如HL7,Dicom,EDF,GDF等,其中HL7最是简单,直观,使用Xm ...
- 观点 | 朱靖波:辅助翻译技术需「以人为本」
观点 | 朱靖波:辅助翻译技术需「以人为本」 2020-04-20 00:11:50 编者按:朱靖波教授是小牛翻译创始人.东北大学计算机学院教授,为国内外著名的机器翻译学者.在本文中,朱靖波教授反思了 ...
- The Illustrated Transformer:中英文(看原文,很多翻译是错误的)
在上一篇文章中(previous post),我们研究了注意力机制 - 一种在现代深度学习模型中无处不在的(ubiquitous)方法. 注意力是一个有助于提高神经机器翻译(neural machin ...
- scala中akka actor例子
抛开复杂的业务逻辑,让我们从一个超级简单的例子学习Akka Actor的用法. Scala cookbook的作者Alvin Alexander在他的网站上提供了两个例子. 本文翻译.整理于他的两篇文 ...
- AsyncDisplayKit官方文档个人翻译
迁移老文章到掘金 文档比较老了,不适用最新的2.0 AsyncDisplayKit 官方文档 最近在拆解学习AsyncDisplayKit这个很知名的轮子,发现这个轮子内容还是非常庞大的,想要分解学习 ...
- 人工智能翻译之间的对决:谷歌为什么败给了有道?
由于人工智能的飞速发展,机器翻译水平正在大幅提升,并逐渐赶超人类,这已经是不争的事实.然而,同在机器翻译这个赛道里的各位"赛手",谷歌.有道等传统翻译产品或公司,也正在上演着一场激 ...
- 论文翻译-Scene Text Detection and Recognition: The Deep Learning Era
论文翻译-Scene Text Detection and Recognition: The Deep Learning Era 原文地址:https://arxiv.org/pdf/1811.042 ...
最新文章
- android getitem,android – ItemDecoration重写getItemOffsets()和动画
- 5种处理js跨域问题方法汇总(转载)
- servlet——登录练习(登录页面登录请求登录请求处理)
- ob服务器维修视频,教你如何使用OB系统 还在看转播?你OUT了!
- java get 空指针_Java 中空指针处理方法
- linux7 语言包,Centos 7中文语言包的安装及中文支持
- 兼容性记录-class属性
- java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法
- android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法
- RANDOM模块:PYTHON获取随机数
- BT5新的征程!全民***计划!
- cr2格式缩略图不显示_cr2缩略图补丁 佳能相机RAW文件CR2原片格式缩略图显示补丁- 游侠下载站...
- 魔兽世界单机版(模拟器)入门介绍--Starting off with WoW Emulation. 翻译
- 《地理信息系统概论》课后习题全部答案_黄杏元
- 计算机用户密码怎么查看,怎么查看电脑开机密码【具体阐明】
- python程序写诗_用Python光速为你写诗
- 铁甲小宝像车轮的是什么机器人_铁甲小宝里的机器人都叫什么名字啊
- 关于文件你必须了解的一些基本概念
- poe工业以太网交换机可以当普通交换机用吗,poe工业以太网交换机有哪些优势
- 长沙理工大学ACMore编程协会2018年新生赛(重现赛)