如果我創建一個循環多少個線程在一個循環
for(int i=0;i<n;i++){//do something}
,並通過Visual Studio運行它,我的程序創建一個線程每次迭代,對整個循環,或者它是一個可變數目?
如果我創建一個循環多少個線程在一個循環
for(int i=0;i<n;i++){//do something}
,並通過Visual Studio運行它,我的程序創建一個線程每次迭代,對整個循環,或者它是一個可變數目?
並通過Visual Studio運行它,我的程序會爲每次迭代,整個循環創建一個線程,還是一個可變數字?
以上都不是。你的程序在默認情況下會有一個執行線程,並且它將循環執行循環的每個迭代,而不會創建新的線程。
只有像OpenMP(或類似的)才能在每次迭代中產生不同的線程。
#include <omp.h>
#pragma omp parallel for
for(int n=0; n<10; ++n) { printf(" %d", n); }
printf(".\n");
那麼如果我在循環中創建一個線程而沒有同步它會發生什麼?它會打印一個數字,然後執行線程在每個循環中所要求的內容嗎? –
@GeorgeIrimiciuc - 所有以非同步方式運行的線程都會發生同樣的事情......無論發生什麼事情,每次都可能不一樣。 – mah
這個補充問題很大程度上取決於OpenMP的規範。你應該特別提出一個關於OMP的新問題。我懷疑你可以產生新的線程,它們獨立於OMP使用的任務。然而,魔鬼的細節。 OMP提供了可能影響最終爲新線程存儲句柄/上下文的影響範圍(或生命期)規則,這可能會影響您以後如何可靠地獲取該線程。 –
這一切都取決於什麼是在循環的身體,默認沒有 – Mgetz
一個簡單的任務,如打印一個數字。 –
這是一個正常的循環,它不會創建任何線程。我們在這裏錯過了一些代碼嗎? – user2802841