.NET 3.x Синхронизация доступа к общим данным - C#
Формулировка задачи:
Вечер добрый, товарищи.
Возникло три вопроса.
Первый.
Возможно ли создать массив byte[] с более чем 2 млн. элементов.
Второй.
Синхронизация доступа к общим данным. Каков наиболее удачный вариант синхронизации в случае двух потоков к очереди, в случае, если 1й поток производит запись в очередь, а 2й - читает элемент и извлекает его из очереди.
В голову пришёл лок lock:
Какие ещё варианты могут быть.
Третий.
Возможно ли пример иp предыдущего пункта модифицировать AutoResetEvent-ми с той целью, чтобы поток, записавший цифру в очередь уведомлял об этом второй поток, а тот уже проводил извлечение из очереди?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Queue<int> myQueue = new Queue<int>();
Random rand = new Random();
for(int i = 0; i < 5; i++)
{
new Thread(() =>
{
lock (myQueue)
{
myQueue.Enqueue(rand.Next(10));
}
}
).Start();
new Thread(() =>
{
if(myQueue.Count > 0)
{
Console.WriteLine("Element: {0}", myQueue.Dequeue());
}
else
{
Console.WriteLine("No element");
}
}
).Start();
}
}
}
}Решение задачи: «.NET 3.x Синхронизация доступа к общим данным»
textual
Листинг программы
byte[] bytes = new byte[2000001];