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 互斥锁吗?
SetEvent
和 WaitForSingleObject
确实提供了 SetEvent
之前的写入在 WaitForSingleObject
returns 之后可见的保证。这里不需要提供任何其他内容。
我调试了一个崩溃的复杂应用程序,我怀疑线程之间的内存没有正确同步。这是一个演示潜在问题的简化示例:
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 互斥锁吗?
SetEvent
和 WaitForSingleObject
确实提供了 SetEvent
之前的写入在 WaitForSingleObject
returns 之后可见的保证。这里不需要提供任何其他内容。