您的位置:首页 > 其它

线程同步----信号量(Semaphore)

2015-04-22 10:56 225 查看
创建信号量:

[cpp] view
plaincopy

HANDLE CreateSemaphore(

LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // 安全属性。NULL 为默认

LONG lInitialCount, // 信号量初值,必须 >= 0

LONG lMaximumCount, // 信号量的最大值,也就是在同一时间内能够锁住信号之线程的最多个数

LPCTSTR lpName // 信号量的名字

);

//返回值:成功返回一个 handle,否则返回 NULL

semaphore 的现值代表的意义是目前可用的资源数,每当一个锁定动作成功,semaphore 的现值就会减 1。一旦 semaphore 的现值降到 0,就表示资源已经耗尽,此时,任何线程如果调用 waitxxx() 函数,必须要等待。

CreateSemaphore() 的第二个参数是 lInitialCount,如果把这个初值设定为 0,你的线程就可以在产生 semaphore 之后进行所有必要的初始化工作,等初始化工作完成后,调用 ReleaseSemaphore() 就可以把现值增加到其最大可能值。

释放信号量:

[cpp] view
plaincopy

BOOL ReleaseSemaphore(

HANDLE hSemaphore, // handle to semaphore

LONG lReleaseCount, // semaphore 现值的增额,该值不可以是负值或 0

LPLONG lpPreviousCount // 返回 semaphore 原来的现值

);

任何线程都可以在任何时间调用 ReleaseSemaphore(),解除被任何线程锁定的 semaphore。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: