2010-06-25 25 views
0

是否有可能跳到一個過程的分配時間量程的結尾?我有一個程序在一段共享內存上並行工作,然後所有進程都需要等待其他進程完成並在下一步之前同步。每個進程最多隻能執行一次迭代,因此任何時間差異都很小。我很肯定,即使是睡着了(1)會花費比我想要的更長的時間(截至目前我可以在約1.5秒內完成5000次,所以這會增加約20ms到一個測試)。跳到時間量子結束

某種忙碌的等待似乎是一個糟糕的主意,儘管這可能是我最終的結果。

我真的很想爲沿

while(*everyoneDone != 0) { 
    //give up rest of this time-quantum 
} 

它並不需要是實時線的東西,它只是需要要快。有任何想法嗎?

請注意,這將在多處理器機器上運行,因爲如果只有一個內核可以使用,現有的單線程版本的性能會更好。

回答

1

不這樣做,主動等待在應用程序上下文中幾乎總是一個壞主意。使用pthread_barrier_t,這正是爲您的目的預見的工具。

+0

我知道這是一個壞主意,這就是爲什麼我正在尋找替代解決方案。我只是無法找到它,因爲它看起來像我真正想要的。 – zebediah49 2010-06-25 14:26:50

+0

是的,沒有違法意圖,與「不這樣做」我的目標是做出收益的其他答案。 – 2010-06-25 14:42:54

+0

是的,我完全同意(這就是爲什麼我把第二段放在我的答案中)。目前還不清楚OP需要什麼同步原語(障礙意味着你提前知道這將是最後一個完成的線程)。 – caf 2010-06-26 04:43:21

1

你沒有說明你正在使用哪個操作系統,但是如果它是POSIX那麼sched_yield()可能就是你要找的。

確實如此,你幾乎肯定會使用適當的同步原語,比如信號量。

+0

這正是我一直在尋找的,但我只是真的在尋找它,因爲我不知道pthread_barrier_t,這似乎是我真正需要的。哦,我必須使用一個信號才能同步對共享狀態int的訪問。這並不漂亮。 – zebediah49 2010-06-25 14:24:58

相關問題