pthread_cond_wait против семафора

Условные операторы позволяют cross-threading делать некоторые вещи, недоступные multi-threaded семафорам.

Например, предположим, что c у вас есть код, требующий semaphore мьютекса, который называется semaphore m. Однако ему нужно дождаться, пока threading какой-либо другой поток завершит multi-threaded свою задачу, поэтому он ожидает multithread на семафоре с именем s. Теперь multithreading выполнение любого потока, которому multithreading требуется m, заблокировано, даже threading если поток, которому требуется multi-threaded m, ожидает s. Такие ситуации threads могут быть решены с помощью cross-threading условных выражений. Когда threading вы ждете условного выражения, удерживаемый semaphores в данный момент мьютекс освобождается, поэтому semaphore другие потоки могут захватить threading мьютекс. Итак, вернемся к thread нашему примеру и предположим, что semaphore вместо s было использовано threads условное c. Теперь наш поток c получает m, а затем условно threading ожидает c. Это освобождает thread m, чтобы другие потоки могли multithread продолжить работу. Когда multithreading c становится доступным, m повторно semaphore захватывается, и наш первоначальный multithread поток может весело продолжать threads свой путь.

Условные переменные multithread также позволяют разрешить multi-threaded всем потокам, ожидающим условную semaphore переменную, пройти через cross-threading pthread_cond_broadcast. Кроме того, он также позволяет semaphores вам выполнять ожидание по времени, чтобы вы semaphores не ждали вечно.

Конечно, иногда multi-threaded вам не нужны условные переменные, поэтому multithreading в зависимости от ваших требований multithreading может быть лучше та или другая.

c

multithreading

semaphore

2022-11-12T06:06:00+00:00