title: C# complex thread synchronization
body: <p>I have quite complex threads synchronization case. I have a collection which is accessed from different threads. One thread, let's name it 'Control thread', updates a collection. Other threads read the collection ('Reading threads'). The logic I want to implement is the following:</p>
  
  <ol>
  <li>Reading threads can read the collection simultaneously.</li>
  <li>When Control thread need to update collection:
  <ul>
  <li>Control thread should not start the update until all reading threads that are currently working with collection complete their work.</li>
  <li>But at the time the Control thread is waiting for finishing reading threads, other reading threads that have not started to work with collection yet, should not start - they should wait until Control thread update the collection.</li>
  </ul></li>
  </ol>
  
  <p>What threads synchronization technique should I use?</p>