临界区线程对象的使用

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

临界区线程对象的使用

#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;
}

作者:铭毅天下
来源:CSDN
原文:https://blog.csdn.net/laoyang360/article/details/7720660
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
3月前
|
存储 设计模式 安全
Java 编程问题:十、并发-线程池、可调用对象和同步器2
Java 编程问题:十、并发-线程池、可调用对象和同步器
33 0
|
3月前
|
缓存 安全 Java
Java 编程问题:十、并发-线程池、可调用对象和同步器1
Java 编程问题:十、并发-线程池、可调用对象和同步器
44 0
|
3月前
|
数据处理
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
43 1
|
1月前
|
存储 开发框架 安全
【C++ 线程】深入理解C++线程管理:从对象生命周期到线程安全
【C++ 线程】深入理解C++线程管理:从对象生命周期到线程安全
88 0
|
1月前
|
存储 安全 Java
调用链跨线程传递 ThreadLocal 对象对比
说起本地线程专属变量,大家首先会想到的是 JDK 默认提供的 ThreadLocal,用来存储在整个链路中都需要访问的数据,并且是线程安全的。由于在落地全链路压测的过程中,一个基本并核心的功能需求是流量标记需要在整个链路中进行传递,那么线程上下文环境成为解决这个问题最合适的技术。
42 2
调用链跨线程传递 ThreadLocal 对象对比
|
3月前
|
Java API 索引
Java 编程问题:十、并发-线程池、可调用对象和同步器4
Java 编程问题:十、并发-线程池、可调用对象和同步器
24 0
|
3月前
|
存储 缓存 算法
Java 编程问题:十、并发-线程池、可调用对象和同步器3
Java 编程问题:十、并发-线程池、可调用对象和同步器
32 0
|
4月前
|
监控 安全 Windows
4.3 Windows驱动开发:监控进程与线程对象操作
在内核中,可以使用`ObRegisterCallbacks`这个内核回调函数来实现监控进程和线程对象操作。通过注册一个`OB_CALLBACK_REGISTRATION`回调结构体,可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型,还有一个`Altitude`字段,用于指定回调函数的优先级。优先级越高的回调函数会先被调用,如果某个回调函数返回了一个非NULL值,后续的回调函数就不会被调用。当有进程或线程对象创建、删除、复制或重命名时,内核会调用注册的回调函数。回调函数可以访问被监控对象的信息,如句柄、进程ID等,并可以采取相应的操作,如打印日志、记录信息等。
28 0
4.3 Windows驱动开发:监控进程与线程对象操作
多线程访问共享对象的线程安全问题
既然是共享对象,就会一个问题,如果两根指针管理同一份资源,delete其中一根指针,造成资源释放指针置空,但是另外另外一根指针却没有被,就会产生非法访问问题。为了解决这个问题我们同样是用强智能指针定义,弱智能指针观察来进行解决。本文将简单介绍这种方法。
进阶——python——多线程(条件对象、信号量对象、事件对象)
进阶——python——多线程(条件对象、信号量对象、事件对象)