Cómo usar un mutex

Tengo un hilo, que está enviando datos almacenados en un búfer de tipo Lista <cadena> a través de tcp. Otro hilo está escribiendo en el búfer. Como no estoy muy familiarizado con c #, me gustaría saber cómo debo usar lock o Mutex correctamente.

Este es el código que me gustaría usar eventualmente:

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

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

Este es mi código actual. Espero que alguien pueda ayudarme a completarlo.

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta