關於如果可以在進程之間共享pthread互斥體的stackoverflow有很多問題,但是我沒有發現有關共享互斥體初始化的問題/回答。正確使用正在進程之間共享的pthread互斥體
據我所知,使用進程共享互斥的常見方式如下:分配一塊共享內存,在共享內存塊上初始化一個pthread互斥量,使用它。
在共享內存創建的情況下,如果多個進程嘗試使用相同的密鑰ID分配共享內存塊,則由OS處理。好的,但我不明白的是,如何安全地初始化共享內存塊上的互斥鎖?
我說得對,pthread_mutex_init沒有提供任何安全的方法來同時從不同的進程初始化pthread_mutex_t?如果是的話,我如何爲流程初始化共享的「互斥」提供獨佔訪問?如何確保另一個進程是否成功初始化互斥鎖?
第二個問題涉及阻塞互斥體的進程崩潰的情況。好的,有一個強大的互斥體可以處理這種情況並返回相應的錯誤代碼。共享內存塊呢?看起來像一個進程應該關心它是否是使用共享內存摧毀它的最後一個進程。
出於好奇,爲什麼不使用POSIX信號量呢? http://man7.org/linux/man-pages/man7/sem_overview.7.html與pthread_mutex不同,POSIX信號量用於進程間通信。 –
@jameslarge這是一個很好的問題。有些人建議使用互斥鎖而不是信號量。例如,http://stackoverflow.com/q/6477525/465662我試圖找到任何真正的優勢 – Rom098