2011-07-13 57 views
1

我一直在負責從C#應用程序移除阻塞調用。原來,這是它將運行的環境的一個要求。我理解阻塞調用的概念,但是,我不確定從哪裏開始查找現有的阻塞調用。查找阻塞調用

那麼幾個問題:

  1. 對於任何給定的功能,我怎麼能告訴它是否阻止?除查找文檔外還有其他辦法嗎?
  2. 有什麼方法可以在項目或解決方案中搜索阻塞?例如。一些可以告訴我的插件?
+1

我想通過「堵」你的意思一個是從UI線程運行時間超過時間少量多調用的函數?例如,文件IO請求可以被視爲阻塞。或者你的意思是嚴格阻止諸如等待信號量或互斥量的調用? –

+0

@AresAvatar,好的問題,需求文檔根本沒有區別。鑑於上下文,我假設文件IO不包括在內。 –

回答

1

有沒有自動的方式,我知道找阻塞調用。大多數阻塞代碼用於線程或進程同步,例如鎖定,Monitor.Enter,Mutex和Semaphore/SemaphoreSlim等待,CountdownEvent和Barrier類的使用。還有一些阻塞的SpinLock和ReaderWriterLock/ReaderWriterLockSlim鎖。

但是也有一些阻塞幾個線程調用。 Thread.Sleep在技術上可以被認爲是阻塞呼叫,儘管它持續有限的時間。 Thread.Join等待其他線程完成並因此阻塞。

for和while循環,可以考慮封鎖,因爲他們將運行,直到他們完成,但通常他們會用電話的一個以上(特別是鎖),如果他們是在一個特定的變量在另一個線程更新等待。

請記住,刪除任何這些是可能對線程安全造成嚴重的負面影響。