2017-12-05 4 views
-3

나는 하나의 특정 방법 bool Method(Myobject Obj)을 가지고 있으며 나는 그를 ParallelFor() 루프에있는 동안 호출하고 싶습니다. 실제로 그렇게 할 수 있습니까? 이 thread-safe 또는 이와 비슷한 것입니까? 이런 방식으로 전화하는 것은 잘못된 것처럼 느껴집니다.ParallelFor의 호출 방법

+5

물론 그렇게 할 수 있습니다. 스레드로부터 안전한지 여부는 메서드가 수행하는 작업에 따라 다릅니다. –

+2

시도해 보셨습니까? 코드를 공유 할 수 있습니까? 'Method'는 어떻게 했습니까? – Icepickle

+0

@Icepickle 아니요. 아직 테스트하지 않았습니다. 객체 'Obj'가 병렬 프로세스 또는 이와 유사한 다른 Obj와 '섞을 수 있는지'알고 싶었습니다. 나는이'Method' 내부가 스레드 교차점이 아니라'Obj' 처리 만한다고 말해야합니다. – BlauWave

답변

2

스레드 안전성은 항상 상황 또는 특정 경우에 따라 결정됩니다.

이제
public static bool Even(int i) 
{ 
    return num % 2 == 0; //true: even, false: odd 
} 

public static void ThreadSafe() 
{ 
    bool[] arr = new bool[333]; 

    Parallel.For(0, arr.Length, index => 
    { 
     arr[index] = Even(index); 
    }); 
} 

하는 것이 안전 스레드 : 이이 있는지,의가 있다고 가정 해 봅시다? 예. 배열의 각 인덱스는 arr의 하나의 관련 인덱스에 값을 할당합니다. 이렇게 병렬로 수행 할 수 있습니다. 하지만 지금은 어떨까요?

public static void ThreadUnsafe() 
    { 
     bool[] arr = new bool[333]; 

     Parallel.For(0, arr.Length, index => 
     { 
      arr[index] = Even(index); 
      int index2 = (index + 1) < arr.Length ? (index + 1) : index; 
      arr[index2] = Even(index); 
     }); 
    } 

주어진 인덱스를 사용하여 arr에 두 개의 인덱스를 할당 할 수 있으며 다른 스레드도이 인덱스에 쓸 수 있습니다. 우리가 모르는 것처럼 스레드로부터 안전하지는 않습니다. 결과는 무엇입니까?

이제 메소드가 사용되는 컨텍스트가 스레드 안전성을 결정할 수 있음을 알 수 있습니다.

또한 스레드 안전성에는 여러 유형이 있습니다.

+1

고마워요, 제가 물어 본 것입니다. 지금 이런 유형의 안전에 대해 읽을 것입니다. – BlauWave