Dot-Net

.NET 中的跨程序讀寫同步原語?

  • August 4, 2021

是否有跨程序工作的讀/寫鎖定機制(類似於互斥鎖,但讀/寫而不是排他鎖定)?我想允許並發讀取訪問,但獨占寫入訪問。

不。正如 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 在上面的文章中查找“此解決方案次優”的字樣。

引用自:https://stackoverflow.com/questions/3503833