プログラムの最適化中にコンパイラが無限ループを生成する方法のデモを行う必要があります。
Visual Studio 2010 の C++ で表示する必要がありますが、揮発性の有無にかかわらず表示するのが最善の方法だと思います。
ここからコードを使用しましたhttp://msdn.microsoft.com/en-us/library/12a04hfd%28v=vs.80%29.aspx 揮発性の有無にかかわらず試してみました(およびコンパイル: /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");
}
しかし、無限ループはありません。誰かがアイデアを持っていますか?