멀티 스레드 코드에서 인스턴스를 여러 스레드에서 읽거나 쓸 수있는 경우 이러한 작업을 안전하게 수행하려면 잠글 필요가 있습니다.MTA에서 쉽게 잠금 만들기
코드를 통해 잠금을 설정하고 잠금 문을 작성하는 반복을 피하기 위해 잠금을 처리 할 일반 클래스를 만들었습니다.
개념적으로 나는 무엇이 있습니까? 이건 잘 될거야, 그렇지?
public class Locked<T> where T : new()
{
private readonly object locker = new object();
private T value;
public Locked()
: this(default(T))
{ }
public Locked(T value)
{
this.value = value;
}
public T Get()
{
lock (this.locker)
{
return this.value;
}
}
public void Set(T value)
{
lock (this.locker)
{
this.value = value;
}
}
}
그리고 그것의 예
클래스에서 사용되는 : 자동화 된 방법으로 또한, 어떻게, 이런 일을 테스트 할private Locked<bool> stopWorkerThread = new Locked<bool>();
public void WorkerThreadEntryPoint()
{
while (true)
{
if (this.stopWorkerThread.Get())
{
break;
}
(예를 들어 단위 테스트를 작성)?
마지막으로, 나는 ++ 및 구현하기 위해 무엇을 할 수 있는지 - 연산자를,이 문제를 방지하려면 :
this.runningThreads.Set(this.runningThreads.Get() + 1);
예제 코드는 잠금 (예)하지 않는 한 작동하지 않을 것입니다 다른 곳에서 선언과 모든 발신자에게 다시 사용됩니다. 그렇지 않으면 각 발신자가 다른 잠금 장치를 사용하여 목적을 이깁니다. 그리고 나서 객체와 lock (obj)을 선언하는 것이 더 간단 할 것입니다. –
글쎄요, 나는 잠긴 상태의 구현 세부 사항을 대기 상태로 두는 것이었지만,이 경우 잠금은 locked <> 클래스가 아닌 인스턴스 (Locked <>)를 사용하면 잠긴 <> 클래스가 방해가됩니다. –