幾個同步問題

2021-06-09 16:27:37 字數 395 閱讀 8556

計算機有許多與同步有關的問題。

1. 哲學家就餐問題

一種解法是某個時間內只有乙個人進餐。另外一種好一點的解法是在拿起筷子之前先測試兩邊的筷子是否空閒,空閒的話就可以吃,否則等待(阻塞);放下筷子之後,提醒旁邊餓的人可以吃了。這個解法需要乙個訊號量陣列,跟蹤哲學家當前的是否可進餐的狀態。另外它限制某乙個時刻只有乙個人可以嘗試拿起筷子,某一時刻只能有乙個人放下筷子。

2. 讀者-寫者問題

有兩個方向,乙個是讀者優先:如果已經有讀者,這後進讀者可一直用資料,只有沒有讀者的時候,寫者才可以使用資料庫;乙個是寫者優先:如果有寫者進入,後進的讀者需要等待寫者操作完成。

3. 生產者-消費者問題

簡單的使用訊號量就可以解決。

4. 理髮師問題

轉化為生產者消費者問題。

對比幾個同步物件

critical section 用來實現 排他占有 適用範圍是單一程序的各個執行緒之間。它是 1 乙個區域性性物件,不是乙個核心物件。2 快速而有效率。3 不能夠同時有乙個以上的critical section被等待。4 無法偵測是否已被某個執行緒放棄。mutex 乙個核心物件,可以在不同的執行緒...

對比幾個同步物件

critical section 用來實現 排他占有 適用範圍是單一程序的各個執行緒之間。它是 1 乙個區域性性物件,不是乙個核心物件。2 快速而有效率。3 不能夠同時有乙個以上的critical section被等待。4 無法偵測是否已被某個執行緒放棄。mutex 乙個核心物件,可以在不同的執行緒...

AQS的幾個同步元件

乙個執行緒或多個執行緒一直等待,直到其他執行緒執行的操作完成才繼續執行。應用 平行計算。計數器是不能重計的,計數值不能往上加,類似操作只有一次。使用時首先new乙個countdownlatch,構造方法中放入計數,然後在乙個執行緒中呼叫await方法,這個執行緒就會進入等待狀態,其他執行緒中呼叫co...