当前位置: 首页 > 编程笔记 >

C++中Semaphore内核对象用法实例

裴欣然
2023-03-14
本文向大家介绍C++中Semaphore内核对象用法实例,包括了C++中Semaphore内核对象用法实例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了C++中Semaphore内核对象的用法,分享给大家供大家参考。具体方法如下:

// Semaphore.cpp : 定义控制台应用程序的入口点。  

//  

  

#include "stdafx.h"  

#include <Windows.h>  

#include <process.h>   

  

HANDLE g_hSemaphore;  

DWORD g_nConut1 = 0;  

DWORD g_nConut2 = 0;  

unsigned __stdcall ThreadProc1( void* pArguments )  

{  

    ::WaitForSingleObject(g_hSemaphore, INFINITE);  

    for (int i=0;i<10000;i++)  

    {  

        g_nConut1++;  

        g_nConut2++;  

    }  

    ::ReleaseSemaphore(g_hSemaphore, 1, NULL);  

    printf("ThreadProc1\n");  

    return 0;  

}  

  

unsigned __stdcall ThreadProc2( void* pArguments )  

{  

    ::WaitForSingleObject(g_hSemaphore, INFINITE);  

    for (int i=0;i<10000;i++)  

    {  

        g_nConut1++;  

        g_nConut2++;  

    }  

    ::ReleaseSemaphore(g_hSemaphore, 1, NULL);  

    printf("ThreadProc2\n");  

    return 0;  

}  

  

unsigned __stdcall ThreadProc3( void* pArguments )  

{  

    ::WaitForSingleObject(g_hSemaphore, INFINITE);  

    for (int i=0;i<10000;i++)  

    {  

        g_nConut1++;  

        g_nConut2++;  

    }  

    ::ReleaseSemaphore(g_hSemaphore, 1, NULL);  

    printf("ThreadProc3\n");  

    return 0;  

}  

int _tmain(int argc, _TCHAR* argv[])  

{  

    g_hSemaphore = ::CreateSemaphore(NULL, 2, 2, NULL);  

    HANDLE hThread[3];  

    hThread[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc1, NULL, 0, NULL);  

    hThread[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc2, NULL, 0, NULL);  

    hThread[2] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc3, NULL, 0, NULL);  

  

    ::WaitForMultipleObjects(2,hThread,TRUE, INFINITE);  

    printf("g_count1=%d\n", g_nConut1);  

    printf("g_count2=%d\n", g_nConut2);  

    printf("main finished.\n");  

    return 0;  

}

希望本文所述对大家的C++程序设计有所帮助。

 类似资料:
  • 内核对象管理接口 结构体 struct   rt_object   内核对象基类控制块 更多...   struct   rt_object_information   内核对象信息 更多...   宏定义 #define  RT_OBJECT_FLAG_MODULE   0x80   动态模块对象标志   类型定义 typedef struct rt_object *  rt_object_t

  • 内核对象,也就是Kobj,为内核提供了一种面向对象 的C语言编程方式。被操作的数据也承载操作它的方法。 这使得在不破坏二进制兼容性的前提下,某一个接口能够增/减相应的操作。 3.1. 术语 对象 数据集合-数据结构-数据分配的集合 方法 某一种操作──函数 类 一种或多种方法 接口 一种或多种方法的一个标准集合 3.2. Kobj的工作流程 译者注: 这一小节两段落中原作者的用词有些含混, 请参考

  • 我正在尝试从页面: 控制器: 但是我似乎无法在前端检索会话

  • 本文向大家介绍C#使用Word中的内置对话框实例,包括了C#使用Word中的内置对话框实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用Word中的内置对话框的方法,分享给大家供大家参考。具体实现方法如下: 使用 Microsoft Office Word 时,有时需要显示用户输入对话框。虽然可以创建自己的对话框,您也许还希望采用使用 Word 中内置对话框的方法,这些对话框在A

  • 主要内容:SqlSessionFactoryBuilder,SqlSessionFactory,SqlSessionMyBatis 有三个基本要素: 核心接口和类 MyBatis核心配置文件(mybatis-config.xml) SQL映射文件(mapper.xml) 下面首先介绍 MyBatis 的核心接口和类,如下所示。   每个 MyBatis 应用程序都以一个 SqlSessionFactory 对象的实例为核心。 首先获取 SqlSessionFactoryBuilder 对象,可以