在 Microsoft Visual C++ 中,我可以调用 CreateThread() 来通过一个void *
参数启动一个函数来创建一个线程。我将一个指向结构的指针作为该参数传递,我看到很多其他人也这样做。
我的问题是,如果我传递一个指向我的结构的指针,我怎么知道结构成员在调用 CreateThread() 之前是否已经实际写入内存?有没有保证它们不会被缓存?例如:
struct bigapple { string color; int count; } apple;
apple.count = 1;
apple.color = "red";
hThread = CreateThread( NULL, 0, myfunction, &apple, 0, NULL );
DWORD WINAPI myfunction( void *param )
{
struct bigapple *myapple = (struct bigapple *)param;
// how do I know that apple's struct was actually written to memory before CreateThread?
cout << "Apple count: " << myapple->count << endl;
}
今天下午,当我阅读时,我在这个网站上看到了很多 Windows 代码以及其他将非易失性数据传递给线程的代码,并且似乎没有任何内存障碍或其他任何东西。我知道 C++ 或至少旧版本不是“线程感知”的,所以我想知道是否还有其他原因。我的猜测是编译器看到我在调用 CreateThread() 时传递了一个指针 &apple,所以它知道在调用之前写出成员apple
。
谢谢