我在两个线程之间共享一个变量。我使用 volatile 来避免优化。
\n\n但是,它显示了由于 strcpy 中没有 volatile 的错误。(如下)
\n\n我怎样才能正确修复这个错误?
\n\n有人告诉我要类型转换掉 易失性。\n但是如果我放弃易失性,那么我就失去了易失性的目的......\n最终可能会因优化而出现运行时错误......不是\'是吗?
\n\n非常感谢。
\n\n(代码可直接编译)
\n\nCRITICAL_SECTION CriticalSection;\n\nHANDLE hEvent;\n\nvoid __cdecl MyThread(void* name)\n\n{\n\nchar serName[256];\n\nvolatile char* vptr = (char*) name;\n\n\n\nEnterCriticalSection(&CriticalSection);\n\n\n\nstrcpy(serName, vptr); // error : cannot convert \'volatile\'\n\n// use (and not modify) name\xe2\x80\xa6\n\n\n\nLeaveCriticalSection(&CriticalSection);\n\nSetEvent (hEvent) ;\n\n}\n\n\n\n\nvoid main ()\n\n{\n\nchar name[256] = "abcde";\n\nhEvent = CreateEvent (NULL, false, false, NULL) ;\n\nif (!InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x80000400) )\n\nreturn;\n\n\n\n_beginthread (MyThread, 0, name) ;\n\n\n\nEnterCriticalSection(&CriticalSection);\n\n// access name\xe2\x80\xa6\n\nLeaveCriticalSection(&CriticalSection);\n\n\n\nWaitForSingleObject (hEvent, INFINITE) ;\n\nDeleteCriticalSection(&CriticalSection);\n\nCloseHandle (hEvent);\n\nsystem("pause");\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n另一方面,我可以编写自己的strcpy来支持易失性。\n但这很奇怪。\n因为如果是这样,那么每次使用易失性时我都必须编写自己的I/O流(或那些复杂的函数)?
\n\n再次感谢您的回答。
\n