하나의 스레드가 있습니다.이 스레드는 List < 문자열> tcp를 통해 버퍼에 저장된 데이터를 전송합니다. 다른 스레드가 버퍼에 쓰고 있습니다. C#에 대해 잘 알고 있지는 않지만 잠금 또는 뮤텍스를 올바르게 사용해야하는 방법을 알고 싶습니다. 뮤텍스 사용 방법
이
내가 결국 사용하려는 코드 :while(buffer.isLocked())
{
buffer.wait();
}
buffer.lockBuffer();
buffer.add(tcpPacket);
buffer.unlockBuffer();
buffer.notify();
이 내 현재 코드입니다. 누군가가 나를 도와 줄 수 있기를 바랍니다.
public class Buffer
{
private Mutex mutex;
private List<string> buffer;
private bool locked = false;
public Buffer()
{
mutex = new Mutex(false);
buffer = new List<string>();
}
public bool isLocked()
{
return locked;
}
public void lockBuffer()
{
if (!locked)
{
//...
locked = true;
}
}
public void unlockBuffer()
{
if(locked)
{
mutex.ReleaseMutex();
locked = false;
}
}
public void wait()
{
mutex.WaitOne();
}
public void notify()
{
//...
}
}
그는 .NET 4.0을 사용하지 않을 수도 있습니다. – Aren
'lock (this) '을 사용하는 것은 나쁜 습관입니다. 외부 클래스가 당신의'BlockingQueue'를 잠그면 어떨까요? –
코드를 보내 주셔서 감사합니다! SemaphoreSlim 객체에 몇 가지 문제가 있습니다. 내가 .NET 3.5를 사용하고 있기 때문에 그것이 있다고 가정합니다. 내가 그들을 어떻게 대체 할 수 있는지 아십니까? – Pedro