2014-03-24 98 views
0

如果我創建一個循環多少個線程在一個循環

for(int i=0;i<n;i++){//do something} 

,並通過Visual Studio運行它,我的程序創建一個線程每次迭代,對整個循環,或者它是一個可變數目?

+0

這一切都取決於什麼是在循環的身體,默認沒有 – Mgetz

+0

一個簡單的任務,如打印一個數字。 –

+0

這是一個正常的循環,它不會創建任何線程。我們在這裏錯過了一些代碼嗎? – user2802841

回答

3

並通過Visual Studio運行它,我的程序會爲每次迭代,整個循環創建一個線程,還是一個可變數字?

以上都不是。你的程序在默認情況下會有一個執行線程,並且它將循環執行循環的每個迭代,而不會創建新的線程。

只有像OpenMP(或類似的)才能在每次迭代中產生不同的線程。

#include <omp.h> 

#pragma omp parallel for 
for(int n=0; n<10; ++n) { printf(" %d", n); } 
printf(".\n"); 
+0

那麼如果我在循環中創建一個線程而沒有同步它會發生什麼?它會打印一個數字,然後執行線程在每個循環中所要求的內容嗎? –

+0

@GeorgeIrimiciuc - 所有以非同步方式運行的線程都會發生同樣的事情......無論發生什麼事情,每次都可能不一樣。 – mah

+0

這個補充問題很大程度上取決於OpenMP的規範。你應該特別提出一個關於OMP的新問題。我懷疑你可以產生新的線程,它們獨立於OMP使用的任務。然而,魔鬼的細節。 OMP提供了可能影響最終爲新線程存儲句柄/上下文的影響範圍(或生命期)規則,這可能會影響您以後如何可靠地獲取該線程。 –