AnswerBun.com

Синхронизация потоков, различия

Stack Overflow на русском Asked by GwenBleidd on July 30, 2020

В чем различие между:

  • lock (someobject) {}
  • Использование Mutex
  • Использование семафора
  • Использование монитора
  • Класс AutoResetEvent
  • ReaderWriterLock

One Answer

Interlocked - если нужно атомарно изменить значение одной простой переменной.

lock - если нужно изменять сложные (составные) типы или множество простых.

Mutex - используется для межпроцессной коммуникации (в отличие от межпоточной).

Semaphore(Slim) - если нужно ограничить количество потоков, работающих одновременно с ресурсом.

ReaderWriterLock(Slim) - реализует стандартный паттерн "Один писатель - много читателей". Судя по многочисленны отзывам, страдает плохой производительностью, даже версия Slim. Устарел. В некоторых случаях его можно заменить на Task + pipeline.

Потокобезопасные коллекции из System.Collections.Concurrent - для безопасной работы с коллекциями объектов из нескольких потоков.

Кардинальное решение проблемы - переход на иммутабельные (неизменяемые) типы. В частности, коллекции System.Collections.Immutable. Нет разделяемых ресурсов - не нужна синхронизация.

Correct answer by Alexander Petrov on July 30, 2020

Add your own answers!

Related Questions

Баг Jtable. Помогите его выявить

1  Asked on December 19, 2021 by shamon

 

Как убрать подстроку из массива

1  Asked on December 19, 2021 by karaname

 

Фильтр feBlend не работает

0  Asked on December 18, 2021

 

адаптивная сетка flex-box

0  Asked on December 16, 2021

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP