肯定有很大的機會我誤解了一些東西。由于 System Verilog 是一種事件驅動的并行語言(就驗證而言),我很難理解底層架構。主要是我想知道是什么阻止了兩個執行緒在同一時刻獲取相同的信號量,以至于每個執行緒都沒有“意識到”另一個執行緒已經獲取了它。對于像 C 這樣的語言,我可以理解(例如在 RTOS 中)每個執行緒輪流與 CPU 一起模擬并行功能,盡管本質上是順序的。System Verilog 也一樣嗎?
IEEE 標準是使用該語言的重要資源,但在理解硬體和軟體之間的橋梁時還有很多不足之處(我的意思是使用該語言作為軟體進行驗證時)。
感謝您的時間和知識。
uj5u.com熱心網友回復:
RTOS 或許多其他作業系統也可以在多個內核上運行執行緒,因此所有執行緒不一定是順序的。但就像在 RTOS 中一樣,SystemVerilog “時間”是一個全域共享資源,并在所有執行緒之間共享。
因為 SystemVerilog 是一種硬體描述語言高密度脂蛋白,有大量的執行緒并行,使得多核執行成為一個非常困難的問題。即使在單個時間單位(事件區域)內,也存在多個同步劃分。
但是IEEE 1800-2017 SystemVerilog LRM 并沒有定義執行緒是順序執行還是并發執行;只能保證或不保證訂購。(第4.6 節確定性和第4.7 節非確定性)。只是 SystemVerilog 執行緒的數量遠遠多于每個執行緒都可以同時運行,并且調度語意被撰寫為最優化 SystemVerilog 模擬內核來管理執行緒,就好像它們都是順序的一樣。
無論 SystemVerilog 執行緒是順序執行還是并發執行,對 semaphore is request 的處理都是一樣的。請求信號量密鑰的執行緒向內核請求密鑰,首先請求它的執行緒首先獲得它。由于內核本身作為單個執行緒運行,因此它可以確定誰應該獲得密鑰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442899.html
上一篇:在Python中完成時終止執行緒
