我在 2 个线程之间共享一个变量。我使用 volatile 来避免优化。
但是,它显示了 strcpy 中没有 volatile 的错误。(如下)
如何正确修复此错误?
有人告诉我要键入 volatile。但是如果我抛弃了 volatile,那么我就失去了 volatile 的目的......最终可能会因为优化而出现运行时错误......不是吗?
非常感谢。
(代码可以直接编译)
CRITICAL_SECTION CriticalSection;
HANDLE hEvent;
void __cdecl MyThread(void* name)
{
char serName[256];
volatile char* vptr = (char*) name;
EnterCriticalSection(&CriticalSection);
strcpy(serName, vptr); // error : cannot convert 'volatile'
// use (and not modify) name…
LeaveCriticalSection(&CriticalSection);
SetEvent (hEvent) ;
}
void main ()
{
char name[256] = "abcde";
hEvent = CreateEvent (NULL, false, false, NULL) ;
if (!InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x80000400) )
return;
_beginthread (MyThread, 0, name) ;
EnterCriticalSection(&CriticalSection);
// access name…
LeaveCriticalSection(&CriticalSection);
WaitForSingleObject (hEvent, INFINITE) ;
DeleteCriticalSection(&CriticalSection);
CloseHandle (hEvent);
system("pause");
}
另一方面,我可以编写自己的 strcpy 来支持 volatile。但这很奇怪。因为如果是这样,那么我每次使用 volatile 时都必须编写自己的 I/O 流(或那些复杂的函数)?
再次感谢您的回答。