gpt4 book ai didi

c++ - 为什么空的 while 循环与其中包含某些内容的 while 循环的 react 不同?

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:47 26 4
gpt4 key购买 nike

我目前有 2 个 pthreads 正在运行,我想等待其中一个 pthreads 结束,以便我的程序继续。

在我的 pthreads 中,我有一个变量,它可以是 true 或 false(它是一个全局变量)。创建线程后(一个在 cin 中请求输入,一个等待 10 秒,如果达到 10 秒,它会杀死“cin”线程并自行结束,如果有 cin,“cin”线程会杀死“计时器”线程检测到)我想让我的程序等待。当每个线程结束时,他们将变量“stoptimer”设置为 true。

首先,在创建线程之后,我开始编写一个 while 循环,如下所示:

while(stoptimer==false){}

线程启动,我们进入 while 循环,但即使线程结束并且“stoptimer”变为真,我们也不会退出循环。

我目前正在这样做:

rc = pthread_create(&threads[1], NULL, Timer, (void *)&td[1]);
if (rc) {
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}

rc = pthread_create(&threads[2], NULL, Choix, (void *)&i);
if (rc) {
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}

while (stoptimer==false) {
cout<<"wait"<<endl;
}

在这里您可以看到我正在创建线程,然后进入带有某些内容的 while 循环。如果我保持这个循环,它正在做我想做的事情,当计时器结束或用户输入一个值时,我们会退出,因为“stoptimer”不再是错误的。但我不希望这个 cout 在这里。

我尝试在循环中添加注释以使其不为空,但它仍然 react 为空。根据我的理解,如果它与计数一起工作,那么现在它应该可以工作,但什么都不做。

为什么要这样做?空 while 循环有什么特别之处吗?

最佳答案

这里的问题是您在没有任何形式的线程同步的情况下读取 stoptimer 变量,我怀疑您也没有任何形式地写入它。

为了保证一个线程所做的更改在另一个线程上可见,您必须使用某种形式的线程同步,或者依赖于了解底层 cpu 的内存模型(弱或强),这通常看起来很容易,但在最好的时候可能很难做到。

查看您的代码,我怀疑使用 conditional variable 会更明智跨线程同步。

关于c++ - 为什么空的 while 循环与其中包含某些内容的 while 循环的 react 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32735213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com