我想使用一個互斥量,它將用於同步訪問駐留在內存共享b/w兩個不同進程中的一些變量。我怎樣才能做到這一點。代碼示例執行,將非常感激。帶pthreads的進程間互斥
回答
改用
POSIX semaphore代替
(請參閱下文)使用1
。
sem_init
作爲未命名信號量或sem_open
作爲已命名信號。
sem_t sem;
/* initialize using sem_init or sem_open */
sem_wait(&sem);
/* critical region */
sem_post(&sem);
多年後最初發布這個答案,它必須被更新。
互斥量實際上應該用來代替信號量。 R和kuga的意見(下文逐字複製)解釋了原因。特別是我發現kuga提到互斥鎖只能通過它們的鎖定線程纔是最引人注目的。
ř
sem_init需要被共享非零pshared的參數,就像一個 互斥需要pshared的屬性。沒有理由爲此選擇 信號量超過互斥量,事實上互斥量會更好,因爲您可以使用強大的互斥量,它允許您處理一個進程在鎖定時死亡的情況(非常真實!)。
KUGA
此外,以R..`s後,一個互斥體只能由線程 用於鎖定它發佈。這通常是必需的,信號量不會提供此功能 。所以這不是正確的答案,傑夫的答案應該被標記爲正確答案 。
這段代碼夠用嗎? – MetallicPriest
@MetallicPriest足夠的是什麼?把更多的精力放在你的問題 – cnicutar
我的意思是,類型sem_t的變量是否需要一些特殊的初始化才能使它適用於進程間通信。 – MetallicPriest
以下示例演示了Pthread進程間互斥體的創建,使用和銷燬。將多個進程的示例推廣爲讀者的練習。
#include <pthread.h>
pthread_mutex_t shm_mutex;
int main(void)
{
int err;
pthread_mutexattr_t attr;
err = pthread_mutexattr_init(&attr); if (err) return err;
err = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); if (err) return err;
err = pthread_mutex_init(&shm_mutex, &attr); if (err) return err;
err = pthread_mutexattr_destroy(&attr); if (err) return err;
err = pthread_mutex_lock(&shm_mutex); if (err) return err;
err = pthread_mutex_unlock(&shm_mutex); if (err) return err;
err = pthread_mutex_destroy(&shm_mutex); if (err) return err;
return 0;
}
- 1. C Pthreads互斥量值?
- 2. 互斥多進程
- 3. Perl中的進程間互斥
- 4. 使用pthreads和互斥體的OpenCV
- 5. Linux中的互斥進程
- 6. pthreads互斥鎖斷言錯誤
- 7. Pthreads:主要覆蓋互斥鎖
- 8. boost進程間共享互斥和boost進程間條件變量共享互斥
- 9. Java中互斥線程的互斥量?
- 10. Ruby中的子進程和互斥體
- 11. 互斥或不互斥互斥?
- 12. C++ - 進程之間共享的互斥體
- 13. 讀寫之間的互斥
- 14. 相互排斥和進程同步; C++
- 15. 跨進程使用互斥鎖
- 16. pthread進程共享互斥死鎖
- 17. 複製互斥從父到子進程
- 18. 多進程,一個互斥體
- 19. pthreads是否支持查詢遞歸互斥鎖的「鎖計數」?
- 20. 互斥體作爲使用pthreads的類成員
- 21. 在Windows中使用互斥進程間同步(win32或C++)
- 22. 加速進程間互斥和檢查放棄
- 23. Boost進程間互斥進程崩潰而不是等待鎖定?
- 24. 帶互斥鎖的WCF Web方法
- 25. 帶有互斥項目的揹包
- 26. C++ pthreads - 嘗試鎖定互斥讀取時崩潰
- 27. Pthreads。如何檢查互斥鎖已鎖定
- 28. C使用pthreads互斥鎖同步問題
- 29. pthreads互斥體實現中是否存在基本錯誤?
- 30. 互斥
爲什麼你的標題說「pthreads」,但你問的是「過程」?無論如何,你如何在內存映射之間共享內存? –
我在分叉之前分配內存。所以一個過程是父母,另一個是孩子。通過pthread,我的意思是使用pthread_mutex_lock。 – MetallicPriest
我覺得'fork'會創建內存的_copies_,所以它不完全是「共享」的。 –