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;

}
目录
相关文章
|
7月前
|
监控 编译器 API
[笔记]Windows核心编程《二十二》注入DLL和拦截API(一)
[笔记]Windows核心编程《二十二》注入DLL和拦截API
153 0
|
4天前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
44 0
|
4天前
|
SQL API Python
Python DB API下规范下cursor对象常用接口
Python DB API下规范下cursor对象常用接口。
22 4
|
4天前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
19 4
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
|
4天前
|
Java C++
多线程学习笔记(二)
1. 子线程先执行:启动子线程后立即调用`join()`,主线程会等待子线程完成。 `suspend()`方法。 3. `synchronized` vs `Lock`:前者是关键字,后者是接口;前者可用在代码块和方法,后者在代码中显式;前者自动释放锁,后者需`finally`释放;前者无超时/中断控制,后者可设定;前者非公平,后者可公平/不公平,且支持读写锁。 4. `synchronized`底层实现:基于 Monitor 模型,JVM层面的锁定机制,通过 monitors 和 monitorenter/monitorexit 指令实现。
|
4天前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
122 1
|
4天前
|
网络协议 Shell vr&ar
某教程学习笔记(一):1、windows基础
某教程学习笔记(一):1、windows基础
20 0
|
4天前
|
Java Linux API
Linux C/C++ 开发(学习笔记五):线程池
Linux C/C++ 开发(学习笔记五):线程池
26 0
|
4天前
|
安全 Linux 调度
Linux C/C++ 开发(学习笔记四):多线程并发锁:互斥锁、自旋锁、原子操作、CAS
Linux C/C++ 开发(学习笔记四):多线程并发锁:互斥锁、自旋锁、原子操作、CAS
45 0