0
두 스레드가 함께 실행중인 경우 두 스레드가 전역 변수를 업데이트하는 방법. 그 가치는 충돌 할 것인가?두 스레드가 함께 실행중인 경우 글로벌 변수 값과 충돌합니다
두 스레드가 함께 실행중인 경우 두 스레드가 전역 변수를 업데이트하는 방법. 그 가치는 충돌 할 것인가?두 스레드가 함께 실행중인 경우 글로벌 변수 값과 충돌합니다
이것은 다중 스레드가 액세스하는 전역 변수로 수행하는 작업에 전적으로 의존합니다.
전역 변수가 스레드로부터 안전하지 않으면 변수가 값을 변경하기 위해 작업 중에 잠겨 있다는 의미에서 경쟁 조건이 발생할 수 있습니다.
어떤 언어를 사용하고 있는지 확실하지 않지만 변경 사항이 적용되는 동안 잠긴 변수 (예 : 속성)에 대한 접근자를 만드는 것이 좋습니다. C#으로는 예를 들어 다음과 같은 의사 코드 쉽게이를 수있다 : 그것은, 각 업데이트 동작 중에 잠겨 있기 때문에 코드는 변수의 값을 변경하는 것을 보장
가private object _LockObject = new object();
private int _SomeProperty;
public int SomeProperty
{
get { return _SomeProperty; }
set
{
lock (_LockObject)
{
_SomeProperty = value;
}
}
}
lock
(스레드 안전).
두 개 이상의 스레드가 동시에 값을 업데이트하지 못하게하려면 'lock'을 사용해야합니다. 어떻게하는지는 사용하는 언어/프레임 워크에 따라 다릅니다. –
공유 데이터와 결합 된 잠금을 사용하고 스레드가 잠금을 보유하고있을 때만 변수를 업데이트하십시오. 물론 이것은 변수가 적어도 하나의 스레드에 의해 작성된 경우에만 적용됩니다. 읽기 전용은 자물쇠가없는 많은 스레드에서 정상입니다. – pasztorpisti
http://www.amazon.com/WIN32-Multithreaded-Programming-Aaron-Cohen/dp/1565922964 – zar