Como usar um mutex

Eu tenho um thread, que está enviando dados armazenados em um buffer do tipo List <string> via tcp. Outro segmento está gravando no buffer. Como não estou familiarizado com c #, gostaria de saber como devo usar o bloqueio ou o Mutex corretament

Este é o código que eu gostaria de usar eventualmente:

 while(buffer.isLocked()) 
 { 
    buffer.wait();
 }

  buffer.lockBuffer();
  buffer.add(tcpPacket);
  buffer.unlockBuffer();
  buffer.notify();

Este é o meu código atual. Espero que alguém possa me ajudar a concluí-lo.

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

questionAnswers(3)

yourAnswerToTheQuestion