나는 하나의 특정 방법 bool Method(Myobject Obj)
을 가지고 있으며 나는 그를 ParallelFor()
루프에있는 동안 호출하고 싶습니다. 실제로 그렇게 할 수 있습니까? 이 thread-safe 또는 이와 비슷한 것입니까? 이런 방식으로 전화하는 것은 잘못된 것처럼 느껴집니다.ParallelFor의 호출 방법
-3
A
답변
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
물론 그렇게 할 수 있습니다. 스레드로부터 안전한지 여부는 메서드가 수행하는 작업에 따라 다릅니다. –
시도해 보셨습니까? 코드를 공유 할 수 있습니까? 'Method'는 어떻게 했습니까? – Icepickle
@Icepickle 아니요. 아직 테스트하지 않았습니다. 객체 'Obj'가 병렬 프로세스 또는 이와 유사한 다른 Obj와 '섞을 수 있는지'알고 싶었습니다. 나는이'Method' 내부가 스레드 교차점이 아니라'Obj' 처리 만한다고 말해야합니다. – BlauWave