如果兩個程序不僅需要同步,還要保證先後執行順序,就要用兩個訊號量(互斥鎖)來解決
//柵欄模型:實現以下框架中的四個子程序 所有程序做完任務後 在一起執行下一次
#include
#include
#include
#include
#include
#include
#include
#include
#define process_nr 4
void sigfunc(int signo)
exit(1);
}void p_lock(int idx,int semid);
void waitzero(int semid);
void dowork(int idx,int semid);
int main(void)
//init sem value
unsigned short vals[process_nr+1]=;//對多個訊號量值進行初始化
if(semctl(semid,0,setall,vals)==-1)
////////////////////////////////
for(i=0;istruct sembuf bufs[process_nr+1]=;
for(i=0;i
bufs[process_nr].sem_num=process_nr;//父親的資源
bufs[process_nr].sem_op =process_nr;
////////////////////////////////////////
while(1)
while(wait(null)!=-1)
;//empty
return 0;
}void dowork(int idx,int semid)
}////////////////////////////////////////
void p_lock(int idx,int semid)
;semop(semid,&buf,1);
}void waitzero(int semid)
;semop(semid,&buf,1);
}
IPC 訊號量集
ipc通訊機制 訊號量集 1.int semget key t key,int nsems,int sem 第乙個引數是由ftok 獲取的key 第二個引數是要建立的訊號量的個數,如果是0表示獲取訊號量集id 第三個引數是ipc creat,建立訊號量集id。返回乙個訊號量集的id semid.se...
訊號量集(主要是AND訊號量)
訊號量集 當利用訊號量機制解決了單個資源的互斥訪問後,我們討論如何控制同時需要多個資源的互斥訪問。訊號量集是指同時需要多個資源時的訊號量操作。1 and型訊號量集 and型訊號量集是指同時需要多個資源且每種占用乙個資源時的訊號量操作。當一段處理 需要同時獲取兩個或多個臨界資源時,就可能出現由於各程序...
訊號量集(主要是AND訊號量)
訊號量集 當利用訊號量機制解決了單個資源的互斥訪問後,我們討論如何控制同時需要多個資源的互斥訪問。訊號量集是指同時需要多個資源時的訊號量操作。1 and型訊號量集 and型訊號量集是指同時需要多個資源且每種占用乙個資源時的訊號量操作。當一段處理 需要同時獲取兩個或多個臨界資源時,就可能出現由於各程序...