程序執行緒間同步

2021-06-19 06:14:55 字數 1045 閱讀 3642

一:posix訊息佇列(通過固定名稱來建立和引用訊息佇列)

1.可以認為是乙個訊息鍊錶,有足夠的許可權的執行緒可以往佇列中放置和獲取訊息。

2.可指定優先順序、在空佇列放置訊息時候能夠產生乙個訊號或啟動乙個執行緒

3.建立訊息佇列mq_open(),mq_close()關閉(並不刪除),mq_unlink()刪除訊息佇列;

mq_getattr mq_setattr 最大訊息數,單個訊息最大大小,阻塞否,當前訊息數...

mq_send mq_receive,用於接收的buff大小不能小於單個訊息最大大小.

二:同步(互斥鎖和條件變數:都可用於執行緒程序間進行同步) 訊號量同樣是通過名稱來建立和獲取的

1.互斥:作為通用原則,我們總是應該努力減少由乙個互斥鎖鎖住的**量;互斥鎖的時間和資源上消耗是比其他的最小的,但是功能是最單一的

2.條件變數:則用於需要等待的臨界資源。 防止虛喚醒,所以喚醒後還需要再判斷一下看看資源能用不.

屬性:共享屬性、阻塞屬性、

3.讀寫鎖:所有需要讀寫某個資料,大量讀,少量寫,那麼可以使用讀寫鎖。(讀資料比修改資料頻繁)

4.記錄上鎖:fctl,用於單例程式的實現;勸告性上鎖,需要程式協調;

不過訊號量是專門用於程序間的同步,以上的東東預設是執行緒間同步,不過可以設定為程序間同步,

p ++(pass枷鎖) v --(釋放:) 操作

優點:比互斥,能夠跨執行緒進行解鎖;能夠等待而不輪詢;互斥量類似二值訊號量,但是訊號量可以有多值

有點:比條件:條件阻塞的時候有訊號來,那麼訊號會丟失;但是訊號量阻塞的時候有訊號來,那麼訊號會記住

semopen semclose semunlink semwait sempost  semtrywait 

三:共享記憶體

1.檔案對映,實現檔案的讀寫共享。mmap munmap msync 

2.匿名對映,fork來實現父子程序的變數共享

3.posix共享記憶體

1.shm_open通過名稱來建立和獲取的

2.shm_unlink ,讀寫都是通過mmap來獲取共享記憶體的首位址,來讀或寫,隨你操作

執行緒 程序間同步

1 競爭條件 兩個或多個程序 執行緒讀寫某些共享資料時,結果取決於其cpu排程的執行次序,這種現象稱為競爭條件 2 互斥 以某種手段確保當乙個程序 執行緒在使用乙個共享變數或檔案時,其他程序 執行緒不能做同樣的操作 3 臨界區 把對共享記憶體進行訪問的程式片段稱為臨界區,如果能使得兩個程序 執行緒不...

程序間通訊 和 執行緒間同步

前經常搞混,所以記錄下來。程序間通訊主要是指多個程序間的資料互動。而執行緒間同步主要指維護多個執行緒之間資料準確 一致性。一.程序間通訊主要有以下幾種方式 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 ...

程序 執行緒間同步機制。

一 程序 執行緒間同步機制。臨界區 互斥區 事件 訊號量四種方式 臨界區 critical section 互斥量 mutex 訊號量 semaphore 事件 event 的區別 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在任意時刻只允許乙個執行緒對共享資源...