[問題] 關於執行續執行順序的問題
請問一個執行續執行順序的問題
如下圖,每個顏色代表不同函數,上下兩列代表兩個執行續
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
03/03 01:12, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章