【发布时间】:2012-01-30 08:48:14
【问题描述】:
在开发过程中,我经常会遇到下一个问题:如果某个方法已经被一个线程执行,那么方法一定不能被另一个线程执行。另一个线程必须什么都不做 - 简单地退出方法,因为它我不能使用“锁”。通常,我是这样解决这个问题的:
private bool _isSomeMethodExecuted = false;
public void SomeMethod ()
{
if (!this._isSomeMethodExecuted) //check if method is already executed
{
this._isSomeMethodExecuted = true;
//Main code of method
this._isSomeMethodExecuted = false;
}
}
但是这段代码不是线程安全的:如果一个线程执行条件语句但它在设置标志为真之前停止并且另一个线程可以执行条件 - 那么两个线程都在方法代码中。
是否有任何线程安全的替换?
【问题讨论】:
-
为什么不能使用lock语句?
-
@Axarydax: IMO 是因为方法执行器不应该被锁定,它应该简单地退出这个方法并继续下面的代码
标签: c# .net multithreading thread-safety