临界区线程对象的使用

简介: 临界区线程对象的使用

#include <windows.h>

#include <iostream>

using namespace std;

 

CRITICAL_SECTION g_cs;

bool g_bContinue = true;

int g_count1 = 0;

int g_count2 = 0;

 

DWORD WINAPI ThreadProc(LPVOID lpParameter);

 

int main()

{

HANDLE g_hTrd[2];

 

InitializeCriticalSection(&g_cs);     //This function initializes a critical section object.  

 

g_hTrd[0] = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);

g_hTrd[1] = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);

 

WaitForMultipleObjects(2,g_hTrd,FALSE,1000);  

g_bContinue = false;

 

CloseHandle(g_hTrd[0]);

CloseHandle(g_hTrd[1]);

 

DeleteCriticalSection(&g_cs);       //This function releases all resources used by an unowned critical section object.  

 

Sleep(1);

cout << "g_count1 = " << g_count1 << "\t g_count2 = " << g_count2 << endl;

return 0;

}

 

 

DWORD WINAPI ThreadProc(LPVOID lpParameter)

{

while(g_bContinue)

{

 //This function waits for ownership of the specified critical section object.  

 //The function returns when the calling thread is granted ownership.  

 EnterCriticalSection(&g_cs);  

 g_count1++;

 g_count2++;

 cout << "g_cnt1 = " << g_count1 << "\t g_cnt2 = " << g_count2 << endl;

 //This function releases ownership of the specified critical section object.  

LeaveCriticalSection(&g_cs);                

}

return 0;

}

相关文章
|
1月前
|
存储 设计模式 安全
Java 编程问题:十、并发-线程池、可调用对象和同步器2
Java 编程问题:十、并发-线程池、可调用对象和同步器
43 0
|
1月前
|
缓存 安全 Java
Java 编程问题:十、并发-线程池、可调用对象和同步器1
Java 编程问题:十、并发-线程池、可调用对象和同步器
49 0
|
1月前
|
数据处理
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
49 1
|
2天前
|
安全 Java
如何测试map对象的线程不安全
【6月更文挑战第20天】如何测试map对象的线程不安全
5 0
|
1月前
|
存储 安全 Java
调用链跨线程传递 ThreadLocal 对象对比
说起本地线程专属变量,大家首先会想到的是 JDK 默认提供的 ThreadLocal,用来存储在整个链路中都需要访问的数据,并且是线程安全的。由于在落地全链路压测的过程中,一个基本并核心的功能需求是流量标记需要在整个链路中进行传递,那么线程上下文环境成为解决这个问题最合适的技术。
49 2
调用链跨线程传递 ThreadLocal 对象对比
|
1月前
|
存储 安全
除了Lock对象,还有其他方法可以实现多线程安全的单例模式吗?
【2月更文挑战第5天】【2月更文挑战第12篇】除了Lock对象,还有其他方法可以实现多线程安全的单例模式吗?
|
1月前
|
存储 开发框架 安全
【C++ 线程】深入理解C++线程管理:从对象生命周期到线程安全
【C++ 线程】深入理解C++线程管理:从对象生命周期到线程安全
134 0
|
1月前
|
Java API 索引
Java 编程问题:十、并发-线程池、可调用对象和同步器4
Java 编程问题:十、并发-线程池、可调用对象和同步器
26 0
|
1月前
|
存储 缓存 算法
Java 编程问题:十、并发-线程池、可调用对象和同步器3
Java 编程问题:十、并发-线程池、可调用对象和同步器
34 0
|
6月前
|
监控 安全 Windows
4.3 Windows驱动开发:监控进程与线程对象操作
在内核中,可以使用`ObRegisterCallbacks`这个内核回调函数来实现监控进程和线程对象操作。通过注册一个`OB_CALLBACK_REGISTRATION`回调结构体,可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型,还有一个`Altitude`字段,用于指定回调函数的优先级。优先级越高的回调函数会先被调用,如果某个回调函数返回了一个非NULL值,后续的回调函数就不会被调用。当有进程或线程对象创建、删除、复制或重命名时,内核会调用注册的回调函数。回调函数可以访问被监控对象的信息,如句柄、进程ID等,并可以采取相应的操作,如打印日志、记录信息等。
45 0
4.3 Windows驱动开发:监控进程与线程对象操作

热门文章

最新文章