2015-09-13 1 views
1

J'ai deux threads qui sont en concurrence sur une seule ressource, mais fréquemment l'un ou l'autre fil est nécessaire pour effectuer d'autres tâches. Y at-il un mécanisme disponible que [1. me permet d'acquérir un verrou exclusif] mais [2. peut être interrompu pendant qu'il attend]Comment faire pour interrompre Monitor.Enter

Je préférerais éviter les délais d'attente (c.-à-Monitor.TryEnter) à minimiser les frais généraux.

Nous vous remercions de votre conseil.

+0

Si vous avez la liberté de recul et de repenser ce regard à ManualResetEvent et AutoResetEvent. En bref, vous pouvez créer un mécanisme de partage différent, tel qu'une file d'attente ou une tâche, de sorte que les threads ne soient pas obligés de s'interrompre dans les autres travaux en cours. (Ou pourquoi le thread 1 doit-il le verrouiller exclusivement pendant si longtemps). Pouvez-vous déplacer le fardeau vers la ressource contrainte afin que les threads essaient chacun d'eux et attendent en même temps. Ou est-ce que chacun de vos deux threads est vraiment 4 threads. Thread 1 est vraiment MainThread1a et WorkerThread1b. –

Répondre

1

Maintenant, je suis en utilisant SemaphoreSlim:

semaphore.WaitAsync(cancellationToken)