병렬 처리를 반복하고 조건이 충족되면 변수를 변경합니다.MATLAB에서 parfor를 사용할 때 경쟁 조건 피하기
trials = 100;
greatest_so_far = 0;
best_result = 0;
for trial_i = 1:trials
[amount, result] = do_work();
if amount > greatest_so_far
greatest_so_far = amount;
best_result = result;
end
end
내가 parfor
에 의해 for
을 교체하고 싶다면, 우리가 greatest_so_far
을 교체할지 여부를 검사 할 때 조건이 경주되지 않도록 할 수있는 방법 : 모두 확신 슈퍼 관용적 코드는 백 번을 썼다? 이 변수를 수표 바깥에 고정시키는 방법이 있습니까? 아마도 :
trials = 100;
greatest_so_far = 0;
best_result = 0;
parfor trial_i = 1:trials
[amount, result] = do_work();
somehow_lock(greatest_so_far);
if amount > greatest_so_far
greatest_so_far = amount;
best_result = result;
end
somehow_unlock(greatest_so_far);
end
이 링크는 matlab에 뮤텍스를 사용할 수있는 것처럼 보입니다. 나는 그것에 대한 경험이 없지만 이것이 당신이 원하는 것이라고 생각합니다. http://www.mathworks.com/matlabcentral/answers/22180-timers-and-thread-safety – KDecker
감사합니다 BumSkeeter, 내가 뭘 할 수 있는지 보자. – rhombidodecahedron
+1 잘 쓰여진 질문 –