gpt4 book ai didi

c++ - 并发 : C++11 memory model for shared variables in multithreaded environment

转载 作者:太空狗 更新时间:2023-10-29 20:00:04 25 4
gpt4 key购买 nike

如果全局变量在 2 个不同内核上的 2 个并发运行的线程之间共享,即使对共享变量的访问受临界区控制,是否存在数据竞争或意外值的可能性?我需要声明变量 atomic(volatile) 吗?每个核心可能在其缓存中具有共享变量的值,并且当一个线程写入缓存中的拷贝时,不同核心上的另一个线程可能会在线程 1 释放锁后从其缓存中读取陈旧值。默认情况下,编译器是否为由关键部分或互斥体控制的变量生成 volatile 读/写代码?

最佳答案

如果对共享变量的所有访问都受同一个互斥体或关键部分的保护,那么这将避免该变量上的数据竞争和意外值,即使线程位于不同的内核上也是如此。互斥量的锁定和解锁功能将包括必要的同步指令,以确保缓存在处理器内核之间正确同步。在锁定区域内,可以使用普通指令访问共享变量。

没有必要将共享变量声明为原子的,除非您打算没有互斥锁的保护来访问它们。

关于c++ - 并发 : C++11 memory model for shared variables in multithreaded environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815833/

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