【问题标题】:Win Api - SetEvent and WaitForSingleObject, memory synchronization betweent threadsWin Api - SetEvent 和 WaitForSingleObject,线程间的内存同步
【发布时间】: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


【解决方案1】:

SetEventWaitForSingleObject 确实提供了保证SetEvent 之前的写入在WaitForSingleObject 返回之后可见。此处无需提供任何其他内容。

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 2013-08-19
    • 1970-01-01
    • 2019-03-20
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多