寫者讀者問題(C 實現)

2021-09-24 19:05:40 字數 2468 閱讀 8196

問題描述

有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生***,但若某個寫程序和其他程序(讀程序或寫程序)同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求:

①允許多個讀者可以同時對檔案執行讀操作;

②只允許乙個寫者往檔案中寫資訊;

③任一寫者在完成寫操作之前不允許其他讀者或寫者工作;

④寫者執行寫操作前,應讓已有的讀者和寫者全部退出。

讀者優先演算法

在此演算法中,讀程序是優先的,簡單來講,當存在讀者程序時,寫者操作將被延遲,並且只要有乙個讀者程序活躍,隨後而來的讀者程序都將被允許訪問檔案。這樣的方式下,會導致寫者程序可能長時間等待,且存在寫者程序「餓死」的情況。

using system;

using system.threading;

/*讀者優先*/

//寫者程序

protected

static

void

writer()

}//讀者程序

protected

static

void

reader()

countmutex.

release()

; console.

writeline

("read-"

+ rcount)

; thread.

sleep

(1000);

countmutex.

waitone()

; rcount--;if

(rcount ==0)

// 最後乙個讀程序釋放寫程序的資源

countmutex.

release()

;}}}

}

寫者優先演算法

如果希望寫程序優先,即當有讀程序正在讀共享檔案時,有寫程序請求訪問,這時應禁止後續讀程序的請求,等待到已在共享檔案的讀程序執行完畢則立即讓寫程序執行,只有在無寫程序執行的情況下才允許讀程序再次執行。

using system;

using system.threading;

//寫者優先

//writer

protected

static

void

writer()

thread.

sleep

(1000);

wcmutex.

release()

; wsem.

waitone()

; console.

writeline

("write-"

+ wcount)

; wsem.

release()

; wcmutex.

waitone()

; wcount--;if

(wcount ==0)

wcmutex.

release()

;}}//reader

protected

static

void

reader()

thread.

sleep

(1000);

rcmutex.

release()

; rsem.

release()

; console.

writeline

("read-"

+ rcount)

; rcmutex.

waitone()

; rcount--;if

(rcount ==0)

rcmutex.

release()

;}}}

}

公平競爭演算法
using system;

using system.threading;

public static void reader()

rcmutex.release();

console.writeline("read-" + rcount);

thread.sleep(1000);

rcmutex.waitone();

rcount--;

if (rcount == 0)

rcmutex.release();

rmutex.release();}}

public static void writer()}}

}

讀者寫者問題

生產者消費者問題一樣,讀者寫者也是乙個非常著名的同步問題。讀者寫者問題描述非常簡單,有乙個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者在讀檔案時寫者也不去能寫檔案。上面是讀者寫者問題示意圖,類似於生產者消費者問題的分析過程,首先來找找哪些是屬於 等待 情況。...

讀者寫者問題

問題簡述 讀者 寫者問題的讀寫操作限制 包括讀者優先和寫者優先 1 寫 寫互斥,即不能有兩個寫者同時進行寫操作。2 讀 寫互斥,即不能同時有乙個執行緒在讀,而另乙個執行緒在寫。3 讀 讀允許,即可以有乙個或多個讀者在讀。讀者優先的附加限制 如果乙個讀者申請進行讀操作時已有另乙個讀者正在進行讀操作,則...

讀者 寫者問題

讀者 寫者問題 讀者 寫者問題 readers writers problem 也是乙個經典的併發程式設計問題,是經常出現的一種同步問題。計算機系統中的資料 檔案 記錄 常被多個程序共享,但其中某些程序可能只要求讀資料 稱為讀者 reader 另一些程序則要求修改資料 稱為寫者 writer 就共享...