while(1){
cout<"--"<;
if(tickCountA == previous_tickCountA )
continue;
cout<<"success!"<;
previous_tickCountA = tickCountA;
}
以上是线程A做的事,线程B负责每隔一秒使tickCountA++,我的原意是想每次线程B改变了tickcount的值的时候线程A能输出一个success,但实际运行结果发现,线程A从来不输出success,但是第一句的输出结果却是tickCountA和previous_tickCountA的值永远保持了一致,,也就说最后一句赋值语句确实运行了,那为什么success从来不输出呢,实在是不懂,求解惑
可能是因为tickCountA和previous_tickCountA的值在线程A运行的时候没有发生变化,所以if语句一直不满足,所以success从来不输出。可以尝试在线程A中加入一个sleep函数,让线程A每次运行的时候都有一定的延迟,这样就可以让tickCountA和previous_tickCountA的值有机会发生变化,从而输出success。
该回答引用ChatGPT
我认为在当前线程A的代码中,success永远不会被输出,因为线程A处于一个无限循环中,当条件if(tickCountA == previous_tickCountA)不成立时,执行continue语句,跳过当前循环,回到while循环的开头重新执行。因此,当tickCountA等于previous_tickCountA时,不会执行continue之后的代码,也就是不会输出success。
另外,可能的一个问题是tickCountA和previous_tickCountA没有在同一个线程中进行同步更新,即使你在线程A中成功地更新了previous_tickCountA的值,也无法保证线程B已经将新值更新到tickCountA中。因此,为了确保线程之间同步,你可以使用同步原语(如互斥锁或信号量)或者使用C++11中提供的原子类型(如std::atomic)。