process - 多处理器系统中的同步

标签 process parallel-processing x86 operating-system

我知道在单核处理器中使用信号量 可以轻松完成同步。但是在我们有多核的情况下,如果多个进程想要同时进入临界区瞬间,它们是全部进入临界区还是只有一个获胜?获胜者进程获胜的标准是什么?

最佳答案

当两个核心同时尝试进入临界区时,它们都尝试同时写入内存中的信号量,使用锁定的读取-修改-写入操作。为了让核心完成写入,缓存必须获得对包含信号量的缓存行的独占访问权。这迫使另一个核心将该行标记为无效。缓存协议(protocol)确保只有一个内核可以获得独占访问权限,并且该内核进入临界区。

与此同时,另一个也在尝试写入信号量的核心必须等待,因为它仍然需要独占访问缓存行。一旦第一个核心完成其写入操作,另一个核心就获得独占访问权并可以完成其读取-修改-写入。但是read-modify-write的结果告诉它信号量忙,所以它不能进入​​临界区,直到检测到信号量​​被释放。

关于process - 多处理器系统中的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620619/

相关文章:

c++ - 如何在 C++ 中实现非静态、非虚方法?

powershell - 如何在 Powershell 中设置低 I/O ("background") 优先级

c# - 从 C# 中的同一个流中读取多次

python - 多处理池示例不起作用并卡住内核

c++ - 并行计算——混淆了输出?

python - Numpy:更快地计算涉及求和的三重嵌套循环

c - 我的自定义操作系统内核中的 VGA 显示问题

linux - 2020 年 Intel x86-64 CPU 用户空间的 TSC(时间戳计数器)有多稳定?

java - 如何使用java停止正在运行的批处理文件

c++ - 使 system() 产生的子进程在父进程收到终止信号并退出后继续运行