【发布时间】:2015-05-26 12:39:07
【问题描述】:
public class Example {
private boolean jobInProgress = false;
public void job() {
lock(this) {
if (jobInProgress) {
return;
}
jobInProgress = true;
}
// Code to execute job goes here
// ...
}
void jobCompleted() {
lock(this) {
jobInProgress = false;
}
}
}
我从 Wikipedia 获得了这段代码,但我有一件事我不确定。
为什么jobInProgress = true; 没有在返回语句之后的锁定块内设置?更明确地说,我将尝试给出一个场景:
- 一个线程在其他线程等待时获取锁
- 它释放锁,但在执行jobInProgress = true;之前,等待线程之一获得锁并测试仍然为假的条件。 这是一个可行的方案还是我没有得到正确的执行流程?
【问题讨论】:
标签: c# multithreading thread-safety