什么机制阻止 System Verilog 线程同时获取信号量?

What mechanism prevents System Verilog threads from obtaining a semaphore at the same time?

我很有可能误会了什么。由于 System Verilog 是一种事件驱动的并行语言(关于验证),我很难理解底层架构。我主要想知道是什么阻止了两个线程在同一时刻获取相同的信号量,以至于每个线程都不会“意识到”另一个线程已经获取了它。对于像 C 这样的语言,我可以理解(例如在 RTOS 中)每个线程轮流使用 CPU 来模拟并行功能,尽管本质上是顺序的。 System Verilog 也是如此吗?

IEEE 标准是使用该语言的重要资源,但在理解硬件和软件之间的桥梁时(我的意思是使用该语言作为软件进行验证时)还有很多不足之处。

感谢您的时间和知识。

RTOS 以及许多其他操作系统可以 运行 多个内核上的多个线程,因此所有线程不一定是顺序的。但是类似于RTOS,SystemVerilog“时间”的概念是一个全局同步的资源,并在所有线程之间共享。

由于 SystemVerilog 是一种硬件描述语言 ,存在大量的线程并行性,使得 multi-core 执行成为一个非常困难的问题。并且即使在单个时间单元(事件区域)内也存在多个同步划分。尽管可以在一段时间内断开线程之间的这种同步,(如时钟周期或事务级别边界)一些主线程内核必须在同步发生时进行协调。

IEEE 1800-2017 SystemVerilog LRM 没有定义线程是顺序执行还是并发执行;仅保证或不保证订购。 (第 4.6 节确定性 4.7 非确定性 节)。只是 SystemVerilog 线程的数量远远多于每个 运行 并发的线程数,而且调度语义是为 SystemVerilog 模拟内核编写的最佳方式,以管理线程,就好像它们都是顺序的一样。

无论SystemVerilog线程是顺序执行还是并发执行,信号量请求的处理都是一样的。请求信号量密钥的线程向内核询问密钥,并且首先请求它的线程首先获得它。由于内核本身作为单个线程运行,因此它可以确定谁应该以确定的方式获取密钥。