Доступ к очереди из разных потоков - 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);
}

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


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

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

7   голосов , оценка 3.714 из 5
Похожие ответы