Microsoft Visual C++では、1つのvoid *
パラメータを持つ関数を起動してCreateThread()を呼び出してスレッドを作成できます。私はそのパラメタとして構造体へのポインタを渡します。私は他の多くの人にもそうしています。C++ - スレッドに渡されるデータはvolatileであるべきですか?
私の構造体へのポインタを渡しているのですか?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++を知っているか、少なくとも古いリビジョンは「スレッド認識」ではないので、別の理由があるのだろうかと思っています。私の推測では、コールの前にapple
のメンバーを書き出すことを知っているので、コンパイラがCreateThread()の呼び出しでポインタ& appleを渡したことがわかります。
がスレッドに参加していると思います? –
これはCではなく、C++( 'struct bigapple *'?) –