zoukankan      html  css  js  c++  java
  • 线程同步机制--信号量

    信号量用于线程同步,同步就是协调解决问题。

    拥有信号量的线程可以执行,没有信号量的线程等待其他线程释放信号量后获取信号量后可以执行。

    步骤:

    1.创建一个信号量对象,该对象存储了信号量个数。

    HANDLE handle=CreateSemaphore(NULL,initCount,maxCount,name);

    参数2:可用的信号量个数,必须小于等于maxCount,且大于等于0;

    参数3:最大的信号量,必须大于0;

    参数4:该信号量的名称。

    在该函数后调用hResult=GetLastError(),若hResult==ERROR_ALREADY_EXIST,表示该名称的信号量已经存在了。

    2.等待获取信号量

    WaitSingnalObject(handle,timeout);

    等待信号量,若信号量对象有信号量,则直接返回;或者等待时间超过timeout后也返回。timeout=INFINITE表示永不超时。

    该函数用于抢到信号量后才能返回并执行后面的语句,否则一直等待,直到超时,或者获得了信号量。

    当该函数返回(即获得了信号量),信号量对象的信号量数据减少一个。

    3.获取信号量后在释放信号量

    ReleaseSemaphore(handle,count,&count_left);

    参数1:信号量对象的句柄;

    参数2:释放信号量的个数;

    参数3:执行该语句之前还剩下的信号量的个数。

    当线程执行完毕后,调用该函数归还占有的信号量,此时信号量增加count个。

    4.关闭信号量对象

    CloseHandle(handle)

    当信号量对象使用完毕后,就调用该函数释放信号量对象。

  • 相关阅读:
    脏数据或者场景考虑不全面引发的生产问题
    框架那些事
    RMI远程方法调用和rpc远程过程调用
    如何提高开发效率
    什么是RPC
    TCP/IP协议和HTTP协议
    apache常见错误:VC运行库(找不到 VCRUNTIME140.dll)
    Apache报错:无法使用可靠的服务器域名
    Apache2.4 下载和安装
    Navicat Premium 15.0.17 破解激活(DFoX 注册机)
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8951169.html
Copyright © 2011-2022 走看看