• Concurrency структуры в .net. ConcurrentQueue изнутри

      ConcurrentQueue можно отнести к lock-free конкурентным структурам данных. В ее реализации нет блокировок (lock, Mutex…) и реализована она с использованием:
      — классической функции CompareExchange;
      — SpinWait
      — volatile (используется как memory-barrier)
      В основу ConcurrentQueue заложена структура ring-buffer (кольцевой буфер).
      Читать дальше →
      • +12
      • 22,7k
      • 4
    • Concurrency структуры в .net. ConcurrentDictionary изнутри

      Все началось с одного собеседования, которое и натолкнуло меня к написанию данной статьи. Довольно большая часть разработчиков на платформе .Net не понимает базовые вещи, хотя и использует их повседневно, например lock-ом оборачивают все методы, использующие ConcurrentDictionary, хотя можно было бы обойтись обычным Dictionary<>.

      В науке существуют 3 основных способа реализации конкурентных структур данных:
      • Lock-free структуры данных;
      • Fine-grained блокировка;
      • Transactional memory implementation(транзакционная память);

      ConcurrentDictionary<TKey, TValue> — это thread-safe аналог Dictionary<TKey, TValue>. В его основе лежит, так называемый Fine-grained блокировка.
      Читать дальше →
      • +24
      • 26,2k
      • 6