使用mutex同步多程序

2022-05-17 23:57:37 字數 1830 閱讀 3324

下面程式的功能是,建立一片共享記憶體,讓父程序和子程序都往裡面寫資料,但是要求,父程序或者子程序寫完後,另乙個程序才能開始寫,所有就需要同步。

所謂的共享記憶體

這片記憶體是在核心空間的,所以子程序不複製這片記憶體;如果不是共享記憶體,是父程序裡的記憶體,那麼子程序則複製它。

#include #include #include #include #include #include #include #include int main()

//讓mutex可以同步多個程序

//mutex的預設屬性是同步執行緒的,所有必須要有此行**

if((err = pthread_mutexattr_setpshared(&mattr, pthread_process_shared)) < 0)

//注意:這裡是個大坑,這裡的mutex必須是用共享記憶體的方式建立,目的是父程序和子程序可以共用此mutex。

//否則,父程序的mutex就是父程序的,子程序的mutex就是子程序的,不能達到同步的作用。

pthread_mutex_t* m;

int mid = shmget(ipc_private, sizeof(pthread_mutex_t), 0600);

m = (pthread_mutex_t*)shmat(mid, null, 0);

//使用mutex的屬性,建立mutex

if((err = pthread_mutex_init(m, &mattr)) < 0)

//建立乙個共享記憶體區域,讓父程序和子程序往裡寫資料。

if((shmid = shmget(ipc_private, 1000, ipc_creat | 0600)) < 0)

//取得指向共享記憶體的指標

if((shmptr = shmat(shmid, 0, 0)) == (void*)-1)

tmp = shmptr;

//建立乙個共享記憶體,儲存上面共享記憶體的指標

int shmid2;

int** shmptr2;

if((shmid2 = shmget(ipc_private, 20, ipc_creat | 0600)) < 0)

//取得指向共享記憶體的指標

if((shmptr2 = shmat(shmid2, 0, 0)) == (void*)-1)

//讓shmptr2指向共享記憶體id為shmid的首位址。

*shmptr2 = shmptr;

if((pid = fork()) < 0)

else if(pid == 0)

for(int i = 0; i < 30; ++i)

if((err = pthread_mutex_unlock(m)) < 0)

exit(0);

} else

for(int i = 10; i < 42; ++i)

if((err = pthread_mutex_unlock(m)) < 0)

} //銷毀子程序

wait(null);

//檢視共享記憶體的值

for(int i = 0; i < 70; ++i)

printf("\n");

//銷毀mutex的屬性

pthread_mutexattr_destroy(&mattr);

//銷毀mutex

pthread_mutex_destroy(m);

exit(0);

}

c/c++ 學習互助qq群:877684253

多程序共享 同步

usr bin python coding utf 8 from multiprocessing import process,array,value deff n,a n.value 3.1415926 for i in range 5 a i a i if name main num value...

多程序IO同步

由sharpdevelop建立。使用者 administrator 日期 2018 03 31 要改變這種模板 工具 選項 編寫 編輯標準標頭檔案 usingsystem usingsystem.runtime.serialization.json usingsystem.io usingsyste...

linux 下多程序的同步

linux 多程序的同步 linux多程序我實現同步操作,操作單個訊號量已經不能實現,對多程序的通訊可以採取訊號集的方式,乙個訊號集包含了多個訊號量。首先通過semget 建立訊號量。例如 semid semget semkey,2,0600 iflags 然後對訊號集中各個訊號量賦初值 semct...