2011-07-13 44 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循环,可以考虑封锁,因为他们将运行,直到他们完成,但通常他们会用电话的一个以上(特别是锁),如果他们是在一个特定的变量在另一个线程更新等待。

请记住,删除任何这些是可能对线程安全造成严重的负面影响。