【发布时间】:2020-03-25 04:12:17
【问题描述】:
我调试了一个崩溃的复杂应用程序,我怀疑线程之间的内存没有正确同步。这是一个演示潜在问题的简化示例:
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);
}
有一个逻辑时间关系 - 在调用 SetEvent 之前设置了 buf 但它是否保证内存将在线程之间同步?我应该使用 win api 互斥锁吗?
【问题讨论】:
-
lpParam指向的对象是否比运行ThreadFunc的线程寿命更长?
标签: c multithreading winapi c++17 thread-synchronization