Как синхронизировать потоки?

Как сделать так, чтобы потоки имели ограниченный доступ к общему ресурсу?

Ограничить доступ к общему ресурсу можно с помощью оператора lock. Код, помещённый в тело этого оператора становится недоступным для других потоков до тех пор, пока текущий поток не закончит свою работу.