sábado, 26 de marzo de 2011

Dudas alumnos. Qué diferencia hay entre Monitor.Try() y Monitor.TryEnter()

Con TryEnter si el recurso está libre se bloquea, si no, se espera el tiempo especificado. En caso de que el tiempo expire y el recurso siga bloquedo se devuelve False para poder continuar con otros procesos si es preferible a esperar por conseguir el recurso compartido.


public bool WaitToAddElement(object qValue, int waitTime)
{
if(!Monitor.TryEnter(m_inputQueue,waitTime))
return false;
m_inputQueue.Enqueue(qValue);
Monitor.Exit(m_inputQueue);

return true;
}




En cambio, con Enter, el hilo se bloquearía sin condiciones si el recurso está siendo usado por otro hilo.

public void AddElement(object qValue)

{
Monitor.Enter(m_inputQueue);
m_inputQueue.Enqueue(qValue);
Monitor.Exit(m_inputQueue);
}

No hay comentarios:

Publicar un comentario