2011-12-02 60 views
0

我已經做了一些挖掘工作,最接近我直接回答我的問題的是here如果我在創建子進程之前初始化一個互斥鎖,那麼所有孩子都會尊重這個互斥鎖嗎?

我已經創建了一個互斥鎖,然後旋轉到一個循環,在這裏我監聽TCP/IP端口上的活動,分叉,響應,然後退出子節點。部分「響應」要求孩子自主處理訪問硬件,這受到互斥體的保護。

如果我在創建子進程之前初始化一個互斥量,所有可能同時運行的子進程是否會遵守這個互斥量?

回答

1

不是默認情況下。

您必須將互斥量存儲在共享內存塊中。您可以使用SysV IPC或MAP_SHARED標誌獲得mmap()

您還必須正確設置互斥鎖上的屬性。您需要使用pthread_mutexattr_init()製作互斥屬性並調用pthread_mutexattr_setpshared(),然後將該屬性傳遞給pthread_mutex_init()

如果您不使用共享內存,子進程將無法看到互斥狀態,因爲每個進程都將使用私有副本。如果你沒有設置pshared屬性,互斥鎖可能會使程序崩潰,因爲它不會期望其他進程正在更改數據。