Главная arrow С++ (часть 3) arrow Синхронизация

Синхронизация

При наличии группы потоков или процессов иногда необходимо координировать действия двух или нескольких. Этот процесс называют синхронизацией (synchronization). Наиболее общий пример необходимости синхронизации — организация доступа двух или нескольких потоков к разделяемому ресурсу, который должен использоваться одним потоком в каждый определенный момент времени. Например, если один поток записывает информацию в файл, другому потоку надо помешать делать в это время то же самое. Не обойтись без синхронизации и в том случае, когда один поток ждет события, которое вызывается другим потоком. В такой ситуации нужны некоторые средства, благодаря которым первый поток удерживается в состоянии ожидания до тех пор, пока не произойдет нужное событие. После этого отложенный поток должен продолжить выполнение.
Задача может находиться в двух основных состояниях. Во-первых, она может выполняться (или быть готовой выполниться, как только получит порцию времени). Во-вторых, задача может быть блокирована в ожидании некоторого ресурса или события, в этом случае ее выполнение приостанавливается до тех пор, пока требуемый ресурс не станет доступным или ожидаемое событие не произойдет.
Если вы не знакомы с проблемой синхронизации и наиболее общим ее решением, семафором, следующий подраздел поможет вам.