Semaphore Kernel Mode

来源:互联网 发布:淘宝领取的优酷会员 编辑:程序博客网 时间:2024/06/05 10:55

HANDLE CreateSemaphore(  //建立一个Semephore

  PSECURITY_ATTRIBUTES psa;  //通常NULL

  LONG InitCount,          //一开始的resource count

  BOOL MaxCount,      //resource count的最大值

  PCTSTR pszName;   //取一个名字 名字可以通用

)


HANDLE OpenSemaphore(    //找已经建立好的

  DWORD fdwAccess,  

  BOOL fInheritHandle ,  //是否希望child可以继承

  PCTSTR pszName,  //要寻找现成的名字   

);


BOOL ReleaseSemaphore(//充当producer

HANDLE hSem,

LONG ReleaseCount,    //想要增加多少 resourcecount 

PLONG pPrevCount,     //返回之前的resource count  call by reference 加之前的 count的值

)

返回值 成功或者失败 win producer 不会睡觉 就算resource 满了

resource 满了 返回失败

---------------------------------------------------------------------------------------------

使用WaitForSingleObject() 当消费者

消费者一次把resource count减1

resource count =0 时候 消费者睡觉

Win的ReleaseSemaphore()

*生产者不会真的睡觉

*超过MaxCount只会return FALSE

*生产者要睡觉 要自己想办法 例如 利用event 或者一个反向的semaphore



原创粉丝点击