【发布时间】:2012-01-30 11:16:59
【问题描述】:
我有一个方法,它只能被调用一次,例如Dispose。现在,我意识到它是下一个:
private bool _isAlive = true;
public void Dispose()
{
if (this._isAlive)
{
this._isAlive = false;
//Do Something
}
}
但它不是线程安全的,因为在比较和将标志 _isAlive 设置为 false 之间存在差距。因此,有可能不止一个线程执行//Do Something 代码。
它有线程安全的变体吗?
【问题讨论】:
-
Thread-safe replace for code? 的可能重复项...特别是考虑到您在这两个问题上得到的答案基本相同。
-
@AndrewBarber 不完全...您链接到的问题类似,但仅涉及防止重入(即并行执行多次)...这个问题是关于一次性执行对象的整个生命周期。
-
顺便说一句,您完全错误地描述了您的要求。并不是说
Dispose()必须被调用一次以上,它几乎完全相反:Dispose()必须能够安全地处理被多次调用。 -
我也是这么想的,但是那里的方法执行了很多次。这里只能执行一次
-
@Yahia 考虑到一个跟随另一个的速度,以及用户提出问题的整体模式,这似乎应该是该问题的一部分。
标签: c# .net multithreading thread-safety