假设我们有这段代码:
bool KeepGoing = true;
DataInThread = new Thread(new ThreadStart(DataInThreadMethod));
DataInThread.Start();
//bla bla time goes on
KeepGoing = false;
private void DataInThreadMethod()
{
while (KeepGoing)
{
//Do stuff
}
}
}
现在的想法是使用布尔值是一种终止线程的安全方法,但是因为调用线程上存在布尔值会导致任何问题吗?
该布尔值仅用于调用线程以停止线程,因此它不像在其他地方使用
答案 0 :(得分:2)
您需要明确 / KeepGoing
的位置,但不是;这不安全。它可以保存在x86上的寄存器中(但在大多数非平凡的例子中这不太可能)。您需要将其volatile
或同步(lock
等)访问它。例如,see here。
答案 1 :(得分:0)
希望我不会对此答案感到满意,但是:
Jon的Worker class示例可以替代您正在做的事情,这是线程安全的。我用while(boolVariable)
方法发现的两个问题是某些任务比其他任务花费的时间更长(假设您执行多个任务),这意味着直到该任务结束才会捕获停止。另一个是当你到达循环结束时会发生什么?或许打破,或者只是永远地重复那个任务,如果您正在下载文件列表,那么这并不总是您想要的。