Windows Api - SetEvent 和 WaitForSingleObject,线程间的内存同步

Win Api - SetEvent and WaitForSingleObject, memory synchronization betweent threads

我调试了一个崩溃的复杂应用程序,我怀疑线程之间的内存没有正确同步。这是一个演示潜在问题的简化示例:

DWORD WINAPI ThreadFun(LPVOID lpParam)
{
    T* t = (T*)lpParam;

    WaitForSingleObject(t->startProcessing, INFINITE);

    //fill buffer with some data
    for (int i = 0; i < bufSize; ++i)
    {
        t->buf[i] = i;
    }

    return 0;
}

//Main thread
void T::Process(int* p)
{
    buf = p;
    SetEvent(startProcessing);
}

存在逻辑时间关系——buf 在调用 SetEvent 之前设置,但它是否保证内存将在线程之间同步?我应该使用 win api 互斥锁吗?

SetEventWaitForSingleObject 确实提供了 SetEvent 之前的写入在 WaitForSingleObject returns 之后可见的保证。这里不需要提供任何其他内容。