多執行緒程式設計的關鍵是要保護資料

2021-09-24 11:00:46 字數 728 閱讀 1030

多執行緒的程式與單執行緒相比,主要的特點是「同乙份資料可能會被多個執行緒訪問,而每個執行緒執行的程式**是有可能被從中間中斷的,因此如果處理不好,資料的改變可能不是我們期望的那樣。」

為了讓資料是按期望的那樣被修改,必須保證在多個執行緒訪問這些資料時,一定是某個執行緒執行的某段**按預期全部執行完,才讓另乙個執行緒執行,這稱為執行緒同步concurrency,也就是對資料的保護機制。同步的方式有很多種,比如對某些資料加上volatile,使得對它的get和set操作是安全的。最常見的同步是為了保護可能被多執行緒訪問的資料,對訪問這些資料的**進行加鎖。

一般把資料和訪問資料的**封裝在乙個類中的,所以多執行緒程式設計的主要工作是寫好類,使得當它的方法被多個執行緒呼叫時,資料仍然得到保護。

為了寫好這些類,關鍵是下面三點:

1)搞清楚哪些資料會被多執行緒訪問;

2)根據資料被訪問的特點,確定保護的機制,即同步方式;

3)如果準備採用**加鎖的同步方式,確定哪些**要加鎖,採用哪種加鎖的方式。注意,區分哪些**需要加鎖,要看**使用的資料是否被多執行緒訪問,不是看這個**是否被多執行緒執行。比如:

class a

public void sub()

thread thread1 //執行add

thread thread2 //執行sub

儘管add和sub只被單個執行緒執行,但是必須加鎖,因為它們使用的資料d是被多個執行緒訪問的。(這個例子最好的同步方式是使用atomicinteger,就不用加鎖了)

C 多執行緒的資料保護機制

c 多執行緒的資料保護機制 同許多執行緒api一樣,c 0x用互斥來保護共享資料。有四種互斥型別 non recursive std mutex recursive std recursive mutex 允許鎖超時的non recursive std timed mutex 允許鎖超時的recur...

多執行緒的資料共享保護案例

假設有乙個網路遊戲伺服器,建立了兩個執行緒 乙個執行緒收集玩家命令 數字表示 並把命令資料寫到佇列中 取出佇列中玩家傳送的命令並進行解析,最後執行玩家需要的動作。用成員函式作為執行緒函式 class a bool isoutmsgrecvqueue int command m mutex.unloc...

資料驅動業務發展的關鍵是資料質量和資料分析的合理性

越來越多公司重視it系統在企業經營管理中的重要性,所以,資料驅動 企業經營管理成為乙個熱門的話題。舉個例子,資料驅動的風控管理體系,建立乙個風控管理模型,根據輸入的資料來自動進行風險決策。從而代替人工決策,一方面保障了風險決策的客觀性,另一方面可以大大提高風險決策的高效性。這看起來是乙個理想的風險管...