併發程式設計2

2022-08-29 13:03:36 字數 1203 閱讀 3948

守護程序

守護程序也是乙個程序,可以守護著另乙個程序

乙個程序a設定為b的守護程序,當b結束時a會立刻結束自己不管任務是否執行完畢

將程序的daemon屬性設定為true時這個程序變成了守護程序,設定daemon屬性時必須在開始程序之前

程序安全

使用lock來例項化產生一把鎖,但是要保證每乙個程序訪問的都是同一把鎖

在訪問共享資源前加鎖(acquire),訪問完畢後要解鎖(release)

注意:不能多次加鎖必須在解鎖後才能再次加鎖

加鎖可以保證多個程序修改同一塊資料時,同一時間只能有乙個任務可以進行修改,即序列修改,犧牲了速度保證了資料安全

在使用鎖的時候,無可避免的會降低效率需要找到乙個最合適的地方加上鎖,鎖住的**越少效率越高

join 和 鎖

join是讓整個程序中的**全部序列,而鎖僅僅是讓部分**序列

粒度(被鎖住的**)越少效率越高

互斥鎖相互排斥對方的鎖

乙個程序在執行時另乙個程序會等待

ipc 程序間通訊

程序與程序之間記憶體是物理隔離的無法直接通訊

四種通訊方式:

1 使用乙個共享檔案,在硬碟建立乙個檔案,不同程序之間共享這個檔案

優點:交換資料量幾乎沒有限制

缺點:速度慢

2 系統開闢一塊共享記憶體,以供程序間交換資料

通過manager來開闢

優點:速度快

缺點:資料量不能太大

3 管道

優點:封裝了檔案的開啟,關閉等操作

缺點:速度慢並且是單向的,程式設計複雜度較高

4 socket

不僅可以用於遠端計算機中的程序通訊,還可以用於本地程序通訊基於記憶體,速度快

queue

佇列是乙個容器

特點:先進先出,支援程序間資料共享,自動處理了程序安全問題(加鎖)

通過put來加資料,通過get獲取資料

生產者消費者模型

將原本由乙個程序完成的事拆分為兩個,交給兩個不同的程序(生產者,消費者)來完成

由於程序間記憶體相互隔離,所以需要為兩個角色之間提高乙個共享資料的容器

生產者將生產完成的資料放入容器

消費者從容器中取出資料來處理

生產者消費者模型的優點:

1 平衡了生產者和消費者之間的能力差異,提高處理效率

2 降低雙方的耦合度

學習併發的兩個核心問題是安全性和效率

併發程式設計(2)

作用 private volatile int a 0 強制執行緒到共享記憶體中讀取資料,而不是從執行緒工作中讀取,從而使變數在多個執行緒間可見。volatile無法保證原子性,volatile是輕量級的同步,效能比synchronized強很多,但是只是保證了效能的可見性,並不能替代synchro...

併發程式設計2

2.自旋鎖 spinlock 3.訊號量 2.synchronizer.cpp中對應的slow enter 3.鎖膨脹 inflate也在synchronizer.cpp中 因此synchronized不是自旋鎖 2.什麼時候變成重量級鎖,是因為鎖膨脹,是可逆的,當乙個執行緒持有鎖,當另乙個也來獲取...

併發程式設計2

一台計算機上面執行著很多程序,那麼計算機是如何區分並管理這些程序服務端的呢?計算機會給每乙個執行的程序分配乙個pid號 如何檢視 windows電腦 進入cmd輸入tasklist即可檢視 tasklist findstr pid檢視具體的程序 mac電腦 進入終端之後輸入ps aux ps aux...