SystemVerilog語(yǔ)言中fork...join/join_any/join_none的區(qū)別

在很多的分支并行結(jié)構(gòu)中,常常用到fork...join的結(jié)構(gòu)。

簡(jiǎn)單說(shuō),fork...join/join_any/join_none結(jié)構(gòu)用作并發(fā)執(zhí)行,阻塞父進(jìn)程的執(zhí)行,直到子進(jìn)程執(zhí)行完畢。

用于區(qū)分begin...end語(yǔ)句的順序執(zhí)行:

1)用begin_end語(yǔ)句,通常用來(lái)標(biāo)識(shí)順序執(zhí)行的語(yǔ)句,用它標(biāo)識(shí)的塊稱作順序塊;

2)用fork_join語(yǔ)句,通常用來(lái)標(biāo)識(shí)并行執(zhí)行的語(yǔ)句,用它標(biāo)識(shí)的塊稱作并行塊。


三種并發(fā)類型


1. fork...join

????????????fork // $(0s)

????????????? ? a; // (need 5s)

????????????? ? b; // (need 2s)

????????????? ? c; // (need 3s)

????????????join

????????????d; // $(5s)

當(dāng)運(yùn)行到fork處時(shí),a、b、c三條子線程將會(huì)同時(shí)開(kāi)啟,直到三條線程都運(yùn)行完畢,d語(yǔ)句才會(huì)開(kāi)始執(zhí)行,通常在此處取決于子線程中時(shí)間最長(zhǎng)的那條。

2. fork...join_any

????????????fork // $(0s)

? ????????????? a; // (need 5s)

????????????? ? b; // (need 2s)

????????????? ? c; // (need 3s)

????????????join_any

????????????d; // $(2s)

當(dāng)運(yùn)行到fork處時(shí),a、b、c三條子線程同時(shí)開(kāi)啟,但d語(yǔ)句的開(kāi)啟,將會(huì)取決于a、b、c中運(yùn)行時(shí)間最短的那條。且a與c會(huì)自行繼續(xù)運(yùn)行,直到執(zhí)行完畢。

3. fork...join_none

????????????fork // $(0s)

????????????? ? a; // (need 5s)

????????????? ? b; // (need 2s)

????????????? ? c; // (need 3s)

????????????join_none

????????????d; // $(0s)

當(dāng)運(yùn)行到fork處時(shí),a、b、c三條子線程將與d語(yǔ)句同時(shí)開(kāi)啟,也就是說(shuō)fork...join_none只起到了點(diǎn)火的作用,將線程開(kāi)啟而不占用時(shí)間。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容