簡體   English   中英

如何正確同步這些線程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM