CriticalSection 临界区
// 临界区.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<windows.h>
#include<iostream>
using namespace std;
DWORD g_cnt1;
DWORD g_cnt2;
BOOL g_bContinue = TRUE;
CRITICAL_SECTION cs;
DWORD WINAPI ThreadProc(__in LPVOID lpParameter)
{
::EnterCriticalSection(&cs);
while (g_bContinue)
{
g_cnt1++;
g_cnt2++;
printf("g_cnt1=%d\n", g_cnt1);
printf("g_cnt2=%d\n", g_cnt2);
}
::LeaveCriticalSection(&cs);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread[2];
g_cnt1 = g_cnt2 = 0;
::InitializeCriticalSection(&cs);
hThread[0] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
hThread[1] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
Sleep(100);
g_bContinue = FALSE;
::WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
printf("g_cnt1=%d\n", g_cnt1);
printf("g_cnt2=%d\n", g_cnt2);
::DeleteCriticalSection(&cs);
::CloseHandle(hThread[0]);
::CloseHandle(hThread[1]);
getchar();
return 0;
}
/*函数原型:DWORD WaitForMultipleObjects(
DWORDnCount, // number of handles in array
CONST HANDLE*lpHandles, // object-handle array
BOOLbWaitAll, // wait option
DWORDdwMilliseconds// time-out interval
);WaitForMultipleObjects函数用于等待多个内核对象,
前两个参数分别为要等待的内核对象的个数和句柄数组指针。
如果将第三个参数bWaitAll的值设为TRUE,等待的内核对象全部变成受信状态以后此函数才返回。
否则,bWaitAll为0的话,只要等待的内核对象中有一个变成了受信状态,
WaitForMultipleObjects就返回,返回值指明了是哪一个内核对象变成了受信状态*/
CriticalSection 临界区的更多相关文章
- [转]Delphi多线程编程入门(二)——通过调用API实现多线程
以下是一篇很值得看的关于Delphi多线程编程的文章,内容很全面,建议收藏. 一.入门 ㈠. function CreateThread( lpThreadAttributes: Pointer ...
- delphi 中几种多线程操作方式
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:http: ...
- Boost Thread学习笔记三
下面先对condition_impl进行简要分析.condition_impl在其构造函数中会创建两个Semaphore(信号量):m_gate.m_queue,及一个Mutex(互斥体,跟boost ...
- DELPHI中多线程知识【转】
本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...
- 【delphi】多线程同步之Semaphore
另外两种多线程的同步方法 CriticalSection(临界区) 和 Mutex(互斥), 这两种同步方法差不多, 只是作用域不同; CriticalSection(临界区) 类似于只有一个蹲位的公 ...
- window下线程同步之(Critical Sections(关键代码段、关键区域、临界区域)
关键区域(CriticalSection) 临界区是为了确保同一个代码片段在同一时间只能被一个线程访问,与原子锁不同的是临界区是多条指令的锁定,而原子锁仅仅对单条操作指令有效;临界区和原子锁只能控制同 ...
- delphi之多线程编程(尚未学习)
本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...
- CAN 总线数据收发驱动
目标:使用链表实现 CAN 总线数据的分帧发送和分帧数据的接收,同时将接收到的多帧数据合并成一个完整的数据包. 使用场合:当一个CAN总线网络上有多个端口对同一个端口发送分帧数据,且来自不同端口的分帧 ...
- DELPHI 多线程(TThread类的实现)
之前学习了用API实现,让我们再学习下用DELPHI的TThread类. 先新建一个普通的工程,再新建一个线程类File>>New>>Othre>>Delphi F ...
随机推荐
- HDU 1796 How many integers can you find(容斥)题解
思路:二进制解决容斥问题,就和昨天做的差不多.但是这里题目给的因子不是质因子,所以我们求多个因子相乘时要算最小公倍数.题目所给的因数为非负数,故可能有0,如果因子为0就要删除. 代码: #includ ...
- 【环境搭建】CDH版Hadoop环境搭建
1.下载组件 首先去CDH网站上下载hadoop组件 地址:http://archive.cloudera.com/cdh5/cdh/5/ 注意版本号要与其他的组件CDH版本一致 2.环境配置 设置主 ...
- ZOJ 1456 Minimum Transport Cost(floyd+后继路径记录)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1456 题意:求最短路并且输出字典序最小的答案. 思路:如果用dijkstr ...
- Oncomine: 一个肿瘤相关基因研究的数据库--转载
如果你获得了一个肿瘤差异表达基因,想研究其是否可作为某种肿瘤的潜在标志物和靶点,又怕做实验会得到阴性结果,浪费时间和金钱,这时候你就应该想到Oncomine数据库了(www.oncomine.org) ...
- vmstat命令中System下in cs 何时为高?
https://superuser.com/ https://serverfault.com/ 良好状态指标 CPU利用率:User Time <= 70%,System Time <= ...
- Nginx 多重条件判断
server{ listen 80; server_name xxx.com; index index.html index.htm index.php admin.php; root /home/w ...
- DDD领域模型和充血对象
DDD领域模型 官方说法 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...
- 正则表达式中 (?=pattern) (?!pattern) (?<=pattern) (?<!pattern) 的使用
2018-08-06 12:33:58 StackOverFlow上有个如下的问题: 这里就会用到正向肯定预查(?=pattern):
- C++STL1--set
C++STL1--set 一.说明 set的用法:单一元素,自动排序set的方法:用编译器的提示功能即可,不需要自己记 二.简单测试 /* 安迪的第一个字典 set的用法:单一元素,自动排序 set的 ...
- 枚举1--求小于n的最大素数
枚举1--求小于n的最大素数 总结: 素数是不能被比它小的素数整除. /* 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计 ...