悠悠寸草心演员表翠娥:Semaphore在计算机论文中应该怎么翻译啊?

来源:百度文库 编辑:中科新闻网 时间:2024/04/30 04:12:23
priority inheritance semaphore

同步问题 Semaphore的使用

来源:cww

请先看 "同步问题 Event的使用" 与 "同步问题 Mutex的使用"
Semaphore是另一个同步问题机制,不论是Event或Mutex,其他Process在执WaitForSingleObject
时,就看当时的物件是Signal或UnSignal而决定是否等待,而Semaphore也相同,但是它
要变成Signal /UnSignal的状态,却有些不同,它是提供一个计数值,它允许在这个计数
值之内,任何执行到WaitForSingleObject的Thread都不会停下来,而且每执行
WaitForSingleObject一次,计数值就减一,当计数值变成0时,该Semaphore才会处於
UnSignal的状态,而某个Thread ReleaseSemaphore时,便会将计数值增加,以便其他的
Thread或本身可得Signal的讯号,而使WaitForSingleObject停止等待。

例如说,该电脑只有两个 COM PORT,所以只允许两个计数值同时使用COM PORT,因此,

hSema = CreateSemaphore(ByVal 0&, 2, 2, "MySema")

第2个叁数表示:刚开始的时候,有多少个COM PORT可使用
第3个叁数表示:最多有多少个COM PORT可使用
第4个叁数:Semaphore的名称,只要名称相同,则传回的handle(hSema)会指向相同的
Semaphore物件。因此,要使用相同的名称来Create Semaphore才能达共用
一个Semaphore的效果。
而使用WaitForSingleObject来Check看看是否还有剩下的COM Port可使用,如果还有剩
(计数值 > 0),则没有等待而可执行下一行指令,同时,计数值减1。若有第三个要求
COM PORT的使用,那它就得等待,直到有Thread执行

ReleaseSemaphore(hSema, 1, count)

第2个叁数表示:Release多少个COM PORT出来,一般来说都是1,表示一个ReleaseSemaphore
会将计数器的值加一,但是您也可以指定 > 1的值,代表一口气增加计数器
的值( + n , n > 1)。例如,您的程式一口气使用了两个COM PORT,并假设
您於程式中有使用WaitForSingleObject两次,程式最后,使用
ReleaseSemaphore(hSema, 2, count)而不必
ReleaseSemaphore(hSema, 1, count)执行两次。
第3个叁数表示:ReleaseSemaphore执行之前计数器原来的值。

Semaphore和Event有个地方相同,那就是没有Owner的观念,即Thread A 所Create出的
Semaphore物件,於Thread B中执行ReleaseSemaphore时,依然会增加计数器的值

就是赋初值