保持程序同步的方法有哪些?

2021-08-22 11:29:32 字數 1542 閱讀 4649

1、同步和通訊的目的是一樣的,實現程序間資料共享,同步只是為了做到處理協同。

2、windows 環境下常用的同步方式有:計時器訊號量事件互斥鎖

3、在其他環境下程序同步的四種方法

1、臨界區(critical section):通過對多執行緒的序列化來訪問公共資源或一段**,速度快,適合控制資料訪問。

優點:保證在某一時刻只有乙個執行緒能訪問資料的簡便辦法

缺點:雖然臨界區同步速度很快,但卻只能用來同步本程序內的執行緒,而不可用來同步多個程序中的執行緒。

2、互斥量(mutex):為協調共同對乙個共享資源的單獨訪問而設計的。

互斥量跟臨界區很相似,比臨界區複雜,互斥物件只有乙個,只有擁有互斥物件的執行緒才具有訪問資源的許可權。

優點:使用互斥不僅僅能夠在同一應用程式不同執行緒中實現資源的安全共享,而且可以在不同應用程式的執行緒之間實現對資源的安全共享。

缺點:①互斥量是可以命名的,也就是說它可以跨越程序使用,所以建立互斥量需要的資源更多,所以如果只為了在程序內部是用的話使用臨界區會帶來速度上的優勢並能夠減少資源佔用量。因為互斥量是跨程序的互斥量一旦被建立,就可以通過名字開啟它。

②通過互斥量可以指定資源被獨佔的方式使用,但如果有下面一種情況通過互斥量就無法處理,比如現在一位使用者購買了乙份三個併發訪問許可的資料庫系統,可以根據使用者購買的訪問許可數量來決定有多少個執行緒/程序能同時進行資料庫操作,這時候如果利用互斥量就沒有辦法完成這個要求,訊號量物件可以說是一種資源計數器。

3、訊號量(semaphore):為控制乙個具有有限數量使用者資源而設計。它允許多個執行緒在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目。互斥量是訊號量的一種特殊情況,當訊號量的最大資源數=1就是互斥量了。

優點:適用於對socket(套接字)程式中線程的同步。(例如,網路上的http伺服器要對同一時間內訪問同一頁面的使用者數加以限制,只有不大於設定的最大使用者數目的執行緒能夠進行訪問,而其他的訪問企圖則被掛起,只有在有使用者退出對此頁面的訪問後才有可能進入。)

缺點:①訊號量機制必須有公共記憶體,不能用於分布式作業系統,這是它最大的弱點;

②訊號量機制功能強大,但使用時對訊號量的操作分散, 而且難以控制,讀寫和維護都很困難,加重了程式設計師的編碼負擔;

③核心操作p-v分散在各使用者程式的**中,不易控制和管理,一旦錯誤,後果嚴重,且不易發現和糾正。

4、事件(event): 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。

優點:事件物件通過通知操作的方式來保持執行緒的同步,並且可以實現不同程序中的執行緒同步操作。

缺點:總結:

①臨界區不是核心物件,只能用於程序內部的執行緒同步,是使用者方式的同步。互斥、訊號量是核心物件可以用於不同程序之間的執行緒同步(跨程序同步)。

②互斥其實是訊號量的一種特殊形式。互斥可以保證在某一時刻只有乙個執行緒可以擁有臨界資源。訊號量可以保證在某一時刻有指定數目的執行緒可以擁有臨界資源。

保持程序同步的幾種方法

1 訊號量 用於程序間傳遞訊號的乙個整數值。在訊號量上只有三種操作可以進行 初始化,p操作和v操作,這三種操作都是原子操作。p操作 遞減操作 可以用於阻塞乙個程序,v操作 增加操作 可以用於解除阻塞乙個程序。基本原理是兩個或多個程序可以通過簡單的訊號進行合作,乙個程序可以被迫在某一位置停止,直到它接...

GeekOS 中的程序同步方法

geekos採用了兩種同步方法用來保護臨界區 0.關中斷 1.互斥量 void init screen void begin int atomic 用於禁止中斷,end int atomic ifag 允許中斷。這裡使用了ifag標誌記錄下進入進入臨界區之前的中斷狀態,在end int atomic...

程序同步的幾種方式

1 訊號量 用於程序間傳遞訊號的乙個整數值。在訊號量上只有三種操作可以進行 初始化,p操作和v操作,這三種操作都是原子操作。p操作 遞減操作 可以用於阻塞乙個程序,v操作 增加操作 可以用於解除阻塞乙個程序。基本原理是兩個或多個程序可以通過簡單的訊號進行合作,乙個程序可以被迫在某一位置停止,直到它接...