.NET 3.x Синхронизация доступа к общим данным - C#

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

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

Вечер добрый, товарищи. Возникло три вопроса. Первый. Возможно ли создать массив byte[] с более чем 2 млн. элементов. Второй. Синхронизация доступа к общим данным. Каков наиболее удачный вариант синхронизации в случае двух потоков к очереди, в случае, если 1й поток производит запись в очередь, а 2й - читает элемент и извлекает его из очереди. В голову пришёл лок lock:
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();
 
            }
        }
    }
}
Какие ещё варианты могут быть. Третий. Возможно ли пример иp предыдущего пункта модифицировать AutoResetEvent-ми с той целью, чтобы поток, записавший цифру в очередь уведомлял об этом второй поток, а тот уже проводил извлечение из очереди?

Решение задачи: «.NET 3.x Синхронизация доступа к общим данным»

textual
Листинг программы
byte[] bytes = new byte[2000001];

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


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

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

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