TransWikia.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!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP