IPC 機制 sem 同步與非同步

2021-08-18 20:49:08 字數 3730 閱讀 1491

同步

同步,併發性不高;例如主函式中有子函式,子函式呼叫子函式,這樣會一直呼叫函式,阻塞等待的過程。

非同步> 併發性高,例如多程序、多執行緒。

一旦裝置準備好,就主動通知應用程式,這種情況下應用程式就不需要查詢裝置狀態;非同步是相對於同步而言,兩個程序之間不影響,例如fork乙個程序

程序同步機制

pipe、fifo、訊號量(二值訊號量)、共享類存、訊息佇列、以及socket程式設計

執行緒同步機制

互斥鎖、條件變數、讀寫鎖、訊號量

非同步機制:

訊號是程序間通訊機制中唯一的非同步通訊機制;訊號驅動的非同步i/o,epoll是一種高效處理io的非同步

宣告:

訊號量:訊號量是乙個整數值。單獨使用沒用,必須和資源結合,例如印表機、共享記憶體

1、包裹函式

2、key值

3、semget

4、semctl

5、semop

6、常用命令

1、包裹函式

對函式的簡單包裝,是程式看起來比較簡潔,通常將函式名的第乙個字母大寫即可

//對semget()進行包裹

key_t ftok(const

char * pathname,int pro _id)

return key;

}

2、key值

key值又稱ipc鍵值,利用ftok函式來獲得乙個key,具有唯一性

//路徑名 專案id

ket_t ftok(const

char * pathname,int proj_id);

3、semget 開啟、建立ipc

建立乙個訊號量集,或訪問已存在的訊號量集

//ipc鍵值  訊號量集合(陣列)   ipc_creat|ipc_excl|0755

int semget(key_t key,int nums,int oflag);

4、semctl

對訊號量進行各種操作,獲取訊號量的值、設定訊號量的值、刪除訊號量

// id    訊號量集合下表   getval  setval ipc_rmid

int semctl(int semid,int semmum,int cmd...)

5、semop

對訊號量的操作,例如加減

// id  結構體的位址  陣列元素個數 number

int semop(int semid,struct sembuf *opsptr,siez_t nops);

//結構體使用時,直接定義結構體型別的物件即可

//聯合體使用時,必須宣告聯合體型別,才可以定義物件

struct sembuf

;

6、常用命令

1、ipcs -s 檢視訊號量

2、ipcrm -s id 刪除訊號量

1

#include

2#include

3#include

4#include

5#include

6int main()

7 14else

15printf("key =%x\n",key);

16//獲取id號

17int sem_id = semget(key,1,ipc_creat|0755);

18if(sem_id == -1)

19

23else

24printf("sem_id = %d\n",sem_id);

25//set init val

26union semun

27 ;

//初始化

33union semun info;

34 info.val = 3;

35int re=semctl(sem_id,0,setval,info );

36if(re == -1)

37

40else

41printf("init val success.\n");

42//get val

43int res = semctl(sem_id,0,getval);

44if(res == -1)

45

48else

49printf("val =%d\n",res);

50//op sem

51struct sembuf op;

52 op.sem_num = 0;

53 op.sem_op = 2;

54 op.sem_*** = 0;

55int value;

56 value= semop(sem_id,&op,1);

57if(value == -1)

58

61else

62printf(" semop success.\n");

6364

65//get val

66 res = semctl(sem_id,0,getval);

67if(res == -1)

68

71else

72printf("val =%d\n",res);

73//ipsrm

74 res = semctl(sem_id,0,ipc_rmid);

75if(res == -1)

76

79else

80printf("remove sem success\n");

8182

return

0; 83 }

結果:

同步機制與非同步機制的理解

同步機制與非同步機制的理解 同步機制即在進行輸入輸出時,必須等待輸入輸出完畢後,才能進行後面的操作。非同步傳輸機制就不必等待完畢就可進行其它操作。網路上有乙個比較通俗的例子 請吃飯 同步就是我叫你吃飯,你聽到了就立刻跟我去,若你沒有反應,那我就不停的叫你,直到你回應。同步的特點是我不能做其他任何的事...

執行緒同步和非同步區別 非同步機制

1 區別同步和非同步乙個程序啟動的多個不相干執行緒,它們相互之間關係為非同步。舉個簡單的例子 就是遊戲,遊戲會有影象和背景 這裡的影象和聲音就分別是不同的執行緒 影象一般是主線程 背景 是守護執行緒 守護執行緒就是主線程結束的時候守護執行緒也結束 像這樣的組合就是非同步執行緒 兩個執行緒之間沒什麼關...

同步與非同步

同步執行模式 所謂同步執行模式,是指語句在同步執行模式下,將始終保持對程式流的控制,直至 程式結束。如查詢操作,客戶機上的應用程式在向伺服器發出查詢操作的指令後,將 一直等待伺服器將查詢結果返回客戶機端,然後才繼續進行下一步操作。眾所周知,應用程式要從乙個大表中刪除所有的記錄將是非常耗時的,如果應用...