相关疑难解决方法(0)

num ++是'int num'的原子吗?

一般地,对于int num,num++(或++num),作为读-修改-写操作中,是不是原子.但我经常看到编译器,例如GCC,为它生成以下代码(在这里尝试):

在此输入图像描述

由于第5行对应于num++一条指令,我们可以得出结论,在这种情况下num++ 是原子的吗?

如果是这样,是否意味着如此生成num++可以在并发(多线程)场景中使用而没有任何数据争用的危险(例如,我们不需要制作它,std::atomic<int>并强加相关成本,因为它是无论如何原子)?

UPDATE

请注意,这个问题不是增量是否原子的(它不是,而且是问题的开头行).它是否可以在特定场景中,即在某些情况下是否可以利用单指令性质来避免lock前缀的开销.而且,作为公认的答案约单处理器的机器,还有部分提到这个答案,在其评论和其他人谈话解释,它可以(尽管不是C或C++).

c c++ assembly multithreading atomic

148
推荐指数
8
解决办法
1万
查看次数

系统启动时哪个核心首先初始化?

我想知道多核处理器的哪个核心在cpu启动时首先初始化?(我的意思是在引导程序级别)是第一个核心?还是随机核心?

cpu bootloader

8
推荐指数
1
解决办法
4339
查看次数

原子变量上下文中的总线锁定是什么?

我使用 C++ 很长时间了,现在我开始学习汇编并学习处理器的工作原理(不仅仅是为了好玩,而且我必须作为测试程序的一部分)。在学习汇编时,我开始听到一些我在讨论多线程时在这里和那里听到的一些术语,因为我在科学计算中做过很多多线程。我正在努力获得完整的图片,我很感激帮助我扩大我的图片。

我了解到,最简单的总线就像一个多路复用器,然后是一个多路分解器。每端都以一个地址作为输入,以便将两端与一些外部组件连接起来。两端可以根据地址指向内存、显卡、RAM、CPU寄存器或其他任何东西。

现在开始我的问题:我一直听到人们争论是使用互斥锁还是原子来确保线程安全(我知道没有最终答案,这不是我的问题,但我的问题是关于比较)。例如,这里声称原子是如此糟糕,以至于它们会因为总线锁定而阻止处理器做体面的工作。

有人可以详细解释一下总线锁定是什么,以及为什么它不像互斥锁,而 AFAIK,互斥锁需要至少两个原子操作来锁定和解锁。

c++ multithreading mutex atomic bus

5
推荐指数
2
解决办法
2047
查看次数

标签 统计

atomic ×2

c++ ×2

multithreading ×2

assembly ×1

bootloader ×1

bus ×1

c ×1

cpu ×1

mutex ×1