2014-03-05 1 views
0

두 스레드가 함께 실행중인 경우 두 스레드가 전역 변수를 업데이트하는 방법. 그 가치는 충돌 할 것인가?두 스레드가 함께 실행중인 경우 글로벌 변수 값과 충돌합니다

+0

두 개 이상의 스레드가 동시에 값을 업데이트하지 못하게하려면 'lock'을 사용해야합니다. 어떻게하는지는 사용하는 언어/프레임 워크에 따라 다릅니다. –

+0

공유 데이터와 결합 된 잠금을 사용하고 스레드가 잠금을 보유하고있을 때만 변수를 업데이트하십시오. 물론 이것은 변수가 적어도 하나의 스레드에 의해 작성된 경우에만 적용됩니다. 읽기 전용은 자물쇠가없는 많은 스레드에서 정상입니다. – pasztorpisti

+0

http://www.amazon.com/WIN32-Multithreaded-Programming-Aaron-Cohen/dp/1565922964 – zar

답변

0

이것은 다중 스레드가 액세스하는 전역 변수로 수행하는 작업에 전적으로 의존합니다.

전역 변수가 스레드로부터 안전하지 않으면 변수가 값을 변경하기 위해 작업 중에 잠겨 있다는 의미에서 경쟁 조건이 발생할 수 있습니다.

어떤 언어를 사용하고 있는지 확실하지 않지만 변경 사항이 적용되는 동안 잠긴 변수 (예 : 속성)에 대한 접근자를 만드는 것이 좋습니다. C#으로는 예를 들어 다음과 같은 의사 코드 쉽게이를 수있다 : 그것은, 각 업데이트 동작 중에 잠겨 있기 때문에 코드는 변수의 값을 변경하는 것을 보장

private object _LockObject = new object(); 
private int _SomeProperty; 

public int SomeProperty 
{ 
    get { return _SomeProperty; } 
    set 
    { 
     lock (_LockObject) 
     { 
      _SomeProperty = value; 
     } 
    } 
} 

lock (스레드 안전).