2011-07-26 45 views
2

我想在兩個進程之間創建一個障礙。爲此,我使用了兩個信號量。當進程1到達屏障時,它通過發佈第一個信號量來向進程2發出信號。處理2接收到信號後,發佈第二個信號量作爲確認。兩個進程之間的障礙

的代碼看起來是這樣的......

過程Proc1:

sem_post(&sem_sig); 
sem_wait(&sem_ack); 

PROC2:

sem_wait(&sem_sig); 
sem_post(&sem_ack); 

現在我的問題是,如果這種方法是最有效的或者是還有什麼更好的技術來實現兩個流程之間的流程層面障礙?

回答

2

Linux執行pthread_barrier_t。對我來說,它看起來非常適合您的需求。對於pthread_barrier_init的呼叫,您只需指定此屏障是共享流程的。

+0

如果我執行fork並且pthread_barrier_t在共享內存中,那麼是否需要僅在父進程或兩者中調用pthread_barrier_init。 – MetallicPriest

+0

@MetallicPriest:只在一個過程中。你應該在'fork()'之前執行它,這樣你就可以確定第二個進程在初始化之前不會嘗試訪問它。 – caf