【发布时间】:2015-01-12 09:23:15
【问题描述】:
我希望两个线程最初都在无限循环中运行,但一段时间后我想杀死第一个线程而不等待它完成,第二个应该正常运行。我该如何实施? 当我运行下面的代码时,它给出了调试错误!
void f1(int i)
{
while (1)
{
printf("Executng Thread %d : %d\n", i, j);
Sleep(10);
}
}
int main()
{
std::thread t1(f1, 1);
std::thread t2(f1, 2);
Sleep(100);
t1.~thread();
while (1)
{
Sleep(10);
}
return 0;
}
【问题讨论】:
-
你可以通过从你的计算机上拔掉插头来实现“只是杀死一些东西”。如果您希望能够对程序的行为进行确定性推理,那么您需要实现适当的控制流,而不仅仅是四处寻找。
-
@KerrekSB 你必须在单独的计算机上运行每个线程。
-
@JosephMansfield:我认为一旦你的程序是非确定性的,你就无法真正区分一个线程被杀死和所有线程被杀死(通常)。因此,拔掉插头实际上确实达到了预期的效果,并且无法通过单独使用语言规则与任何其他实现这种效果的方式来区分:-)
标签: c++ windows multithreading