Al final no me funcionó.
Todo esto era para sincronizar el acceso unitario a una estructura de datos. Se me ocurrió otra solución para el acceso unitario a la estructura de datos.
Las tablas hash (Hashtable) de C# tienen un método
SyncRoot para que se pueda bloquear el acceso a la tabla hash (estructura de datos). Por ejemplo:
Código:
Hashtable ht=new Hashtable();
lock(ht.SyncRoot){
//aquí dentro todo lo que se quiera hacer...
//...y que sólo lo pueda hacer un usuario a la vez
}
De esta manera ya, la propia estructura de datos tabla hash, implementa el sistema de semáforos.
Ha sido la mejor solución que he encontrado.
Gracias por la ayuda y espero que a alguien le sirva.