[英]How to properly synchronize these threads?
我正在嘗試正確處理Web應用程序中的文件。 下載文件時,我鎖定了一個對象:
lock(lockObject)
{
//Download file here.
}
因此,如果在下載過程中要從另一個線程中刪除同一文件,則“刪除”線程將等待“下載”線程首先完成:
lock(lockObject)
{
//Delete file here.
}
這可行,但是存在另一個問題:兩個線程無法同時下載文件。
我如何才能使多個線程可以同時運行“下載”代碼,但是在完成“下載”線程之前,不允許任何線程同時運行“刪除”代碼?
我知道答案在Monitor
類中的某個位置,但是我不確定如何實現。
ReaderWriterLockSlim可能會滿足您的需求。 基本上,您將下載線程視為讀取器,將刪除線程視為寫入器。 您可以有任意數量的閱讀器,但是任何作者都需要獨占訪問權限。 因此,如果在刪除方法調用EnterWriteLock
時正在下載任何文件,則刪除線程將必須等待直到所有當前下載完成為止。
ReaderWriterLockSlim theLock = new ReaderWriterLockSlim();
void Delete(filename)
{
theLock.EnterWriteLock();
try
{
// do delete stuff here
}
finally
{
theLock.ExitWriteLock();
}
}
void Download(filename)
{
theLock.EnterReadLock();
try
{
// do delete stuff here
}
finally
{
theLock.ExitReadLock();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.