美文网首页
windows 信号量使用

windows 信号量使用

作者: AD_wang | 来源:发表于2022-06-09 18:27 被阅读0次

#include<iostream>

#include <Windows.h>

using namespace std;

const int MAX_SEM_COUNT = 5;//信号量数量

const int THREAD_COUNT = 10;//线程数量

HANDLE g_sem;//全局信号量对象句柄

DWORD WINAPI threadFunc(LPVOID);//线程函数前向声明

int main()

{

    HANDLE arrThread[THREAD_COUNT];

    g_sem = CreateSemaphore(NULL,MAX_SEM_COUNT,MAX_SEM_COUNT,NULL);

    if (!g_sem)

    {

        cout<<"call CreateSemaphore() failed!"<<endl;

        return -1;

    }

    DWORD threadID = -1;

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

    {

        arrThread[i] = CreateThread(NULL, 0, threadFunc, NULL, 0, &threadID);

        if (!arrThread[i])

        {

            cout<<"call CreateThread() failed!"<<endl;

            return -2;

        }

    }

    WaitForMultipleObjects(THREAD_COUNT, arrThread, true, INFINITE);

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

    {

        CloseHandle(arrThread[i]);

    }

    CloseHandle(g_sem);

    system("pause");

    return 0;

}

//线程函数,使用信号量的例子

DWORD WINAPI threadFunc(LPVOID)

{

    DWORD waitResult;

    bool bContinue = true;

    while (bContinue)

    {

        waitResult = WaitForSingleObject(g_sem,0);

        switch (waitResult)

        {

        case WAIT_OBJECT_0:

            cout << GetCurrentThreadId()<< " wait sem succeed!"<< endl;

            bContinue = false;

            Sleep(5);

            if (!ReleaseSemaphore(g_sem, 1, NULL))

            {

                cout<<"call ReleaseSemaphore() failed!"<<endl;

                return GetLastError();

            }

        break;

        case WAIT_TIMEOUT:

            cout << GetCurrentThreadId()<< " wait sem timeout!"<< endl;

            break;

        }

    }

}

相关文章

  • windows信号量使用

    https://blog.csdn.net/yangchujie_andy_001/article/details...

  • windows 信号量使用

    #include #include using namespace std; const ...

  • iOS进阶-GCD信号量-dispatch_semaphore_

    目录 GCD信号量概念 使用API 实例使用 GCD信号量概念 使用API : dispatch_semaphor...

  • [java并发编程]基于信号量semaphore实现限流器

    [TOC] 一、什么是信号量 “信号量”在编程术语中使用单词semaphore,那什么是“信号量”?信号量就好比你...

  • iOS底层--GCD应用

    手动目录GCD简介信号量信号量的理解信号量的使用信号量的代码实操信号量阻塞哪里的任务?栅栏函数dispatch_b...

  • java concurrency <信号量>

    java concurrency <信号量> 使用信号量的目的 线程信号量的目的是使线程能够彼此发送信号。 此外,...

  • 信号量

    信号量的使用: 信号量使用的业务场景: 一、锁 YYKit加锁代码: 二、异步返回 三、控制并发量,降低性能。

  • 信号量实现网络顺序执行

    信号量的方式实现 CODE CODE ANALYSIS 使用信号量需要注意,dispatch_semaphore_...

  • Java中的管程模型

    操作系统使用信号量解决并发问题,Java选择使用管程(Monitor)解决并发问题。信号量和管程是等价的,可以使用...

  • 信号量

    信号量的使用,其实就是把异步变同步,信号量=0时等待执行,执行完之后把信号量+1,当信号量>0时就可以顺序执行了。...

网友评论

      本文标题:windows 信号量使用

      本文链接:https://www.haomeiwen.com/subject/xiimmrtx.html