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
pthread_cond_wait против семафора
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.