Доступ к очереди из разных потоков - C#
Формулировка задачи:
Подскажите по многопоточности, у меня есть очередь (Queue) и мне надо организовать к ней доступ из разных потоков, выискал несколько решений, одно из них использовать ключевое слово у меня сразу блокируются все остальные потоки или только тогда, когда эти другие потоки дойдут до конструкции
lock
, а так же можно использовать классыMutex
,Monitor
, возник вопрос при использованииMonitor
,Monitor.Enter
блокирует потоки пока не будет выполнен код между ним иMonitor.Exit
, собственно вопрос, а зачем тогда методMonitor.TryEnter
? может быть такое чтоMonitor.Enter
не сможет заблокировать поток? или как или что? Так же что то подобное я встречал классеConcurrentQueue
, в частности методTryDequeue
. так же еще такой вопрос, когда я пытаюсь заблокировать потоки что бы выполнить код в одном из потоков, например:lock(lockObj) { string temp = data.Dequeue(); } // или Monitor.Enter(lockObj); string temp = data.Dequeue(); Monitor.Exit(lockObj);
lock
илиMonitor.Enter
? если не понятно, на примере, допустим я получаю HTML код странницы и далее в конструкцииlock
я эти данные помещаю вQueue
, я начал получать HTML и тут вдруг блокировка потока, вроде как такое может закончится не корректно или потоки остановятся когда дойдут до конструкцииlock
?
читал msdn и еще некоторые источники но то ли я тупой то ли там очень скудное описание всего это.
Решение задачи: «Доступ к очереди из разных потоков»
textual
Листинг программы
for (int i = 0; i < 50; i++) { Monitor.Enter(temp); temp.Add(temp.Count); Monitor.Exit(temp); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д