作者OpenBigJue (开大决)
看板C_and_CPP
标题[问题] 关於执行续执行顺序的问题
时间Mon Mar 2 23:41:54 2009
请问一个执行续执行顺序的问题
如下图,每个颜色代表不同函数,上下两列代表两个执行续
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
1F:推 legnaleurc:可以利用全域的flag counter来确保顺序 03/03 01:12