Dot-Net
.NET 中的跨程序讀寫同步原語?
是否有跨程序工作的讀/寫鎖定機制(類似於互斥鎖,但讀/寫而不是排他鎖定)?我想允許並發讀取訪問,但獨占寫入訪問。
不。正如 Richard 上面提到的,.NET 中沒有這種開箱即用的機制。這是如何使用互斥鎖和信號量來實現它。
方法 #1 在http://www.joecheng.com/blog/entries/Writinganinter-processRea.html中有描述,引用:
// create or open global mutex GlobalMutex mutex = new GlobalMutex("IdOfProtectedResource.Mutex"); // create or open global semaphore int MoreThanMaxNumberOfReadersEver = 100; GlobalSemaphore semaphore = new GlobalSemaphore("IdOfProtectedResource.Semaphore", MoreThanMaxNumberOfReadersEver); public void AcquireReadLock() { mutex.Acquire(); semaphore.Acquire(); mutex.Release(); } public void ReleaseReadLock() { semaphore.Release(); } public void AcquireWriteLock() { mutex.Acquire(); for (int i = 0; i < MoreThanMaxNumberOfReadersEver; i++) semaphore.Acquire(); // drain out all readers-in-progress mutex.Release(); } public void ReleaseWriteLock() { for (int i = 0; i < MoreThanMaxNumberOfReadersEver; i++) semaphore.Release(); }另一種選擇是:
讀取鎖定 - 如上所述。寫鎖定如下(虛擬碼):
- Lock mutex - Busy loop until the samaphore is not taken AT ALL: -- wait, release. -- Release returns value; -- if value N-1 then break loop. -- yield (give up CPU cycle) by using Sleep(1) or alternative - Do write - Release mutex必須注意,更有效的方法是可能的,如下所示:http ://en.wikipedia.org/wiki/Readers-writers_problem#The_second_readers-writers_problem 在上面的文章中查找“此解決方案次優”的字樣。