gpt4 book ai didi

c++ - 这些锁定的内存访问是否等效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:18 25 4
gpt4 key购买 nike

void f1(volatile int* ptr, int value)
{
*ptr = value;
lock or DWORD PTR [rsp], 0; // MemoryBarrier()
}


void f2(volatile int* ptr, int value)
{
xchg DWORD PTR [ptr], value; // InterlockedExchange(ptr, value);
}

语义上等价。显然,无论是否指定了 lock 前缀,xchg 都会被锁定。

编辑:我目前正在使用 VS2010,但可能会移植到 VS2012,我相信关于 volatile 的编译器语义再次发生变化。

最佳答案

大致是的。第一种情况下的 lock 或 确保在任何其他 CPU 可以读取更多内存之前更新数据,在第二种情况下, xchg 指令具有隐式锁定,因此所有其他处理器(核心)必须在您的处理器更新值之前“释放”它们的 *ptr 值。

关于c++ - 这些锁定的内存访问是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com