我有一个应用程序,其中2个线程正在运行...当我从一个线程更改一个全局变量时,是否有任何证据,另一个会注意到这个变化?我没有任何同步或互斥系统......但是这段代码应该一直工作(想象一下名为dataUpdated的全局bool):
线程1:
while(1) {
if (dataUpdated)
updateScreen();
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
线程2:
while(1) {
if (doSomething())
dataUpdated = TRUE;
}
Run Code Online (Sandbox Code Playgroud)
像gcc这样的编译器是否以不检查全局值的方式优化此代码,只在编译时考虑它的值(因为它会在同一个thred中更改)?
PS:对于类似游戏的应用程序而言,在写入值时是否会有读取真的无关紧要......重要的是这个更改会被其他线程注意到.
我是Windows c ++编程的新手.请参阅下面的代码,我想让两个线程同步.第一个线程应该打印"Hello",然后将控件/事件传递给第二个线程.不知道怎么做.截至目前我正在使用Sleep(1000).但是,如果我不使用Sleep,则会导致未定义的行为.请帮忙...
#include <windows.h>
#include <process.h>
#include <iostream>
void thread1(void*);
void thread2(void*);
int main(int argc, char **argv) {
_beginthread(&thread1,0,(void*)0);
_beginthread(&thread2,0,(void*)0);
Sleep(1000);
}
void thread1(void*)
{
std::cout<<"Hello "<<std::endl;
}
void thread2(void*)
{
std::cout<<"World"<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)