下面程式的功能是,建立一片共享記憶體,讓父程序和子程序都往裡面寫資料,但是要求,父程序或者子程序寫完後,另乙個程序才能開始寫,所有就需要同步。
所謂的共享記憶體
這片記憶體是在核心空間的,所以子程序不複製這片記憶體;如果不是共享記憶體,是父程序裡的記憶體,那麼子程序則複製它。
#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...