簡體   English   中英

C win32 api中同步編程中的重復障礙

[英]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/processthreadsapi/nf-processthreadsapi-createthread

創建信號量: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM