[問題] 關於執行續執行順序的問題

看板C_and_CPP (C/C++)作者 (開大決)時間16年前 (2009/03/02 23:41), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
請問一個執行續執行順序的問題 如下圖,每個顏色代表不同函數,上下兩列代表兩個執行續 ThreadFunc一開始是暫停的,等到經過第一次的 Set 後才開始跑 跑完一次後再等待下次 Set 的呼叫 而 GUI 則代表GUI,以及接收到特定 Message 後會跑進 Set 函數 我想要讓每次 Set 完都跑“一次” ThreadFunc 狀況一:GUI時間 > ThreadFunc GUI Set GUI Set GUI Set GUI S ThreadFunc ThreadFunc ThreadFunc 狀況二:GUI時間 < ThreadFunc GUI Set GUI Set GUI Set GUI Set GUI ThreadFunc ThreadFunc ThreadFunc ThreadFunc 我知道如何使用 Critical Section 來保護執行續共用的資源 就我所知,Critical Section只能確定特定區塊不會被重複進入 但不能保證執行順序 以下是我的程式碼,似乎有找到一點 Race Condition 的機會,但程式還沒發生過 不知道這樣寫有沒有錯 void Set() { g_CS.Lock(); (1) thread->resume(); (2) } void ThreadFunc() { thread->suspend(); while( 1 ) { // ... // ... g_CS.Unlock(); (3) thread->suspend(); (4) } } 但這樣似乎不是正確的寫法 考慮執行順序如下:1,2,3,1,2,4 這樣就跟預期的不一樣了.... 請問通常像這種“執行順序”的需求可以用多個 Critical Section 來達成嗎? 或是有其他常用的方法來達成呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.33.43

03/03 01:12, , 1F
可以利用全域的flag counter來確保順序
03/03 01:12, 1F
文章代碼(AID): #19g_v3J5 (C_and_CPP)
文章代碼(AID): #19g_v3J5 (C_and_CPP)