2011-06-20 55 views
0

我有一個關於C中多進程編程的問題,我有幾個讀取器進程將從一個文件讀入一個共享緩衝區,幾個寫入進程從緩衝區讀取到另一個文件中,什麼類型的信號量我們需要爲此使用嗎?以及我們如何使用共享內存與信號量。信號量和共享內存

+1

什麼操作系統?你使用任何多處理特定的庫? – nmichaels

+0

的Linux這裏都是我包括在該文件的標題, 的#include 的#include 的#include 的#include 的#include 的#include 的#include 的#include 的#include #include #include 希望這有助於 – MRK

回答

1

如果你在linux上,一個簡單的選擇是使用pshared mutexes和條件變量。 glibc的recet版本將是必要的。基本上你的共享內存段裏面,你會碰到這樣的:

struct shmem_head { 
    pthread_mutex_t mutex; 
}; 

初始化:

void init_shmem_head(struct shmem_head *head) 
{ 
    pthread_mutexattr_t attr; 
    pthread_mutexattr_init(&attr); 
    pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); 

    pthread_mutex_init(&head->mutex, &attr); 
    pthread_mutexattr_destroy(&head->mutex); 
} 

你現在有一個互斥體,通過共享內存段開放所有進程共享。您可以簡單地使用pthread_mutex_lock鎖定並且pthread_mutex_unlock以正常方式解鎖。如果你想要條件變量,也有類似的pthread_condattr_setpshared