Доступ к очереди из разных потоков - C#

Узнай цену своей работы

Формулировка задачи:

Подскажите по многопоточности, у меня есть очередь (Queue) и мне надо организовать к ней доступ из разных потоков, выискал несколько решений, одно из них использовать ключевое слово

lock

, а так же можно использовать классы

Mutex

,

Monitor

, возник вопрос при использовании

Monitor

,

Monitor.Enter

блокирует потоки пока не будет выполнен код между ним и

Monitor.Exit

, собственно вопрос, а зачем тогда метод

Monitor.TryEnter

? может быть такое что

Monitor.Enter

не сможет заблокировать поток? или как или что? Так же что то подобное я встречал классе

ConcurrentQueue

, в частности метод

TryDequeue

. так же еще такой вопрос, когда я пытаюсь заблокировать потоки что бы выполнить код в одном из потоков, например:
Листинг программы
  1. lock(lockObj) {
  2. string temp = data.Dequeue();
  3. }
  4. // или
  5. Monitor.Enter(lockObj);
  6. string temp = data.Dequeue();
  7. Monitor.Exit(lockObj);
у меня сразу блокируются все остальные потоки или только тогда, когда эти другие потоки дойдут до конструкции

lock

или

Monitor.Enter

? если не понятно, на примере, допустим я получаю HTML код странницы и далее в конструкции

lock

я эти данные помещаю в

Queue

, я начал получать HTML и тут вдруг блокировка потока, вроде как такое может закончится не корректно или потоки остановятся когда дойдут до конструкции

lock

?
читал msdn и еще некоторые источники но то ли я тупой то ли там очень скудное описание всего это.

Решение задачи: «Доступ к очереди из разных потоков»

textual
Листинг программы
  1. for (int i = 0; i < 50; i++)
  2. {
  3.     Monitor.Enter(temp);
  4.     temp.Add(temp.Count);
  5.     Monitor.Exit(temp);
  6. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы