Параллелизм против обычной коллекции?C#

Место общения программистов C#
Ответить
Anonymous
 Параллелизм против обычной коллекции?

Сообщение Anonymous »

У меня есть вопрос по поводу System.Collections.Concurrent
Я видел, что Concurrent на самом деле является безопасной коллекцией потоков, но в каких случаях она может быть полезна?
Я сделал 2 примера, и результат тот же
Сначала ConcurrentQueue:

Код: Выделить всё

    static ConcurrentQueue queue = new ConcurrentQueue();
private static readonly object obj = new object();
static int i = 0;
static int Num = 0;
static void Run(object loopNum)
{
lock (obj)
{
for (int N = 0; N < 10; N++)
{
queue.Enqueue (i);
Thread.Sleep(250);
queue.TryDequeue(out Num);
Console.WriteLine($"{Num} Added! in {loopNum} Loop, ThreadID: [{Thread.CurrentThread.ManagedThreadId}]");
i++;
}
}
}
А теперь обычная очередь:

Код: Выделить всё

    static Queue queue = new Queue();
private static readonly object obj = new object();
static int i = 0;

static void Run(object loopNum)
{
lock (obj)
{
for (int N = 0; N < 10; N++)
{
queue.Enqueue (i);
Thread.Sleep(250);
Console.WriteLine($"{queue.Dequeue()} Added! in {loopNum} Loop, ThreadID: [{Thread.CurrentThread.ManagedThreadId}]");
i++;
}
}
}
Main:

Код: Выделить всё

    static void Main()
{
Thread[] Th = new Thread[] { new Thread(Run), new Thread(Run) };
Th[0].Start("First");
Th[1].Start("Second");

Console.ReadKey();
}
Результат тот же
Конечно, есть несколько разных методов, таких как TryDequeue и еще несколько, но для чего это действительно полезно?
Любая помощь будет очень признательна

Подробнее здесь: https://stackoverflow.com/questions/324 ... collection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»