2017-05-23 7 views
3

Im folgenden BeispielUmfang der Variablen innerhalb Threads für Schleifen?

shared_arr = zeros(4000) 
[email protected] for thread = 1:4 
    tmp_arr = rand(1000) 
    for i = 1:1000 
     shared_arr[(thread - 1)*1000+i] = tmp_arr[i] 
    end 
end 

ich shared_arr glauben wird von allen Threads gemeinsam genutzt. Ist tmp_arr 4 mal zugewiesen, so dass jeder Thread seine eigenen tmp_arr hat?

+0

Ich denke (aber müsste prüfen/denke mehr), dass die Antwort ja ist, und ja. Aber dieser 'Rand' ist nicht threadsicher (aufgrund des gemeinsamen globalen Samens) und kann sich merkwürdig verhalten. Aber ich bin mir nicht sicher. –

Antwort

0

Gemäß der in der Dokumentation beschriebenen Dokumentation scoping rules wird immer dann ein neuer Bereich eingeführt, wenn eine for-Schleife aufgerufen wird. Da tmp_arr nicht vor der Schleife deklariert wird, wird es in jeder Iteration der for-Schleife ein eindeutiger Wert sein. Beachten Sie, dass rand möglicherweise nicht Threadssafe jedoch per @Lyndon White Kommentar ist.

Verwandte Themen