联合交换结构

mka*_*aes 6 c++ windows winapi interlocked

我想使用WinAPI中的InterlockedExchange来使用无锁的线程同步.
目前我有一个这样的课.

struct DataExchange
{
    volatile LONG m_value;
    void SetValue(LONG newVal)
    {
        InterlockedExchange(&m_value, newVal);
    }

    LONG GetValue()
    {
        LONG workVal=0;
        InterlockedExchange(&workVal, m_value);
        return workVal;
    }
};
Run Code Online (Sandbox Code Playgroud)

一个线程可以设置一个新值,另一个线程可以读取该值.
现在我想要做的是将LONG值更改为a struct.在WinAPI中有什么办法可以struct免费复制一个锁吗?

小智 3

不,除非您可以将结构调整为 32 位,在这种情况下您可以继续使用 InterlockedExchange。