Посмотрите на код ниже. Предположим, что это ВЕСЬ класс. Я не пропустил ЛЮБОЙ код. Это буквально все, что он делает.
Если я создаю экземпляр этого класса в цикле моей основной программы и время от времени вызываю myExample.Add (что угодно), нужно ли мне беспокоиться о любых проблемах, вызванных отсутствием блокировки вокруг Dequeue () и Enqueue ()?
public class Example<T>
{
private Queue<T> q = new Queue<T>();
public Example()
{
new Thread(() =>
{
while (true)
{
if (this.q.Count > 0)
{
var item = this.q.Dequeue();
}
Thread.Sleep(1);
}
}).Start();
}
public void Add(T val)
{
this.q.Enqueue(val);
}
}
Что произойдет, если this.q.Enqueue (val) вызывается одновременно с this.q.Dequeue ()?