Как использовать мьютекс

У меня есть один поток, который отправляет данные, хранящиеся в буфере типа List <string> через tcp. Другой поток пишет в буфер. Поскольку я не очень знаком с c #, я хотел бы знать, как правильно использовать lock или Mutex.

Это код, который я хотел бы использовать в конечном итоге:

 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()
    {
        //...
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос