[英]Repeating Barrier in synchronized programming in C win32 api
我有一個包含這個概念的任務,但我不知道如何實現它。
基本思想是我們有一個電影院,有X個座位和Y個人(線程)逐漸到達電影院並想看電影,我需要一個等待X個人到達電影院的屏障,然后讓他們進去看電影,等到最后一個人離開電影院(他們不會一下子離開,而是逐漸離開)然后檢查是否有足夠的人(X)聚集在電影院外開始下一部電影 session如果有足夠的東西讓他們進來,如果沒有,等 X 人聚集然后讓他們進來。
這個簡單的偽代碼應該足以指導您。 這三個信號量需要用 0 初始化。您應該生成一個Theater_thread
和多個Person_thread
。
Person_thread() {
sem1.V(1) // Arrive at theater
sem2.P(1) // Wait to be let in
sleep(1000) // Watch movie
sem3.V(1) // Leave the theater
}
Theater_thread() {
while (1) {
sem1.P(X) // Wait for X persons to arrive
sem2.V(X) // Let X persons to enter
sem3.P(X) // Wait for all persons to leave
}
}
需要 API 調用:
創建信號量: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createsemaphore
WaitForSingleObject(用於信號量P操作和線程連接): https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-registerwaitforsingleobject
發布信號量: https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-releasesemaphore
要將信號量計數減少特定數量,請使用 for 循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.