我必须演示编译器如何在优化程序时产生无限循环。
我必须在 Visual Studio 2010 中用 C++ 展示它,我认为展示它的最佳方式是使用和不使用 volatile。
我使用了这里的代码http://msdn.microsoft.com/en-us/library/12a04hfd%28v=vs.80%29.aspx 并在有和没有 volatile 的情况下进行了尝试(并使用:/EHsc /O2 编译)但是没有无限循环。我也这样改变它:
// compile with: /EHsc /O2
#include <iostream>
#include <windows.h>
using namespace std;
//volatile bool Sentinel = true;
bool Sentinel = true;
int CriticalData = 0;
int round=0;
unsigned ThreadFunc1() {
while (Sentinel){
Sleep(10); // volatile spin lock
cout << "Critical Data = " << CriticalData << endl;
}
return 0;
}
unsigned ThreadFunc2() {
Sleep(2000);
CriticalData++;
Sentinel = false;
return 0;
}
int main() {
HANDLE hThread1, hThread2;
hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc1, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc2, NULL, 0, NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
system("pause");
}
但没有无限循环。有人有想法吗?