windows api学习笔记-用临界区对象使线程同步

简介: #include #include #include using namespace std; int g_nCount1 = 0; int g_nCount2 = 0; CRITICAL_SECTION g_cs;//临界区 BOOL g_bContinue = TRU...
#include <windows.h>
#include <iostream>
#include <process.h>
using namespace std;


int g_nCount1 = 0;
int g_nCount2 = 0;
CRITICAL_SECTION g_cs;//临界区
BOOL g_bContinue = TRUE;//线程结束标志

UINT WINAPI MyThread(LPVOID)
{
	while(g_bContinue)
	{
		::EnterCriticalSection(&g_cs);//如果另一个线程在临界区的话,当前线程会一直等待下去
		g_nCount1++;
		g_nCount2++;
		::LeaveCriticalSection(&g_cs);//把临界区还给Windows
	}
	return 0;
}

int main()
{
	UINT uThreadId;
	HANDLE h[2];
	::InitializeCriticalSection(&g_cs);//临界区初始化
	h[0] = (HANDLE)::_beginthreadex(
		NULL,//线程安全性
		0,//线程堆栈大小
		MyThread,//线程函数的名称
		NULL,//线程函数的参数
		0,//立即启动
		&uThreadId//内核给新生成的线程分配的线程ID
		);
	h[1] = (HANDLE)::_beginthreadex(
		NULL,//线程安全性
		0,//线程堆栈大小
		MyThread,//线程函数的名称
		NULL,//线程函数的参数
		0,//立即启动
		&uThreadId//内核给新生成的线程分配的线程ID
		);
	::Sleep(600);
	g_bContinue = FALSE;
	::WaitForMultipleObjects(
		2,//要等待内核对象的数量
		h,//句柄数组
		TRUE,//是否要等待所有内核对象都成为受信状态
		INFINITE//无限期等待下去
		);
	::CloseHandle(h[0]);
	::CloseHandle(h[1]);
	::DeleteCriticalSection(&g_cs);//删除林界区
	cout<<g_nCount1<<"       "<<g_nCount2<<endl;
	char a;
	cin >> a;

}
目录
相关文章
|
9月前
|
监控 编译器 API
[笔记]Windows核心编程《二十二》注入DLL和拦截API(一)
[笔记]Windows核心编程《二十二》注入DLL和拦截API
186 0
|
2月前
|
SQL API Python
Python DB API下规范下cursor对象常用接口
Python DB API下规范下cursor对象常用接口。
43 4
|
2月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
72 0
|
2月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
37 3
|
2月前
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
30 1
|
2月前
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
33 1
|
2月前
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
29 1
|
2月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
44 4
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
|
2月前
|
Java API 调度
多线程 (上) - 学习笔记1
多线程 (上) - 学习笔记
28 0