Я хочу синхронизировать две темы, если это событие произойдет, я обнаружил, что многие Ressources предполагают использование pthread_cond
в таких ситуациях, однако я не вижу разницы между использованием pthread_cond
и mutexes
:Лучшие ситуации использования pthread_cond_wait
Мы можем использовать следующий код:
// thread 1 waiting on a condition
while (!exit)
{
pthread_mutex_lock(&mutex); //mutex lock
if(condition)
exit = true;
pthread_mutex_unlock(&mutex);
}
... reset condition and exit
// thread 2 set condition if an event occurs
pthread_mutex_lock(&mutex); //mutex lock
condition = true;
pthread_mutex_unlock(&mutex);
Вместо:
//thread 1: waiting on a condition
pthread_mutex_lock(&mutex);
while (!condition)
pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);
//thread 2: signal the event
pthread_mutex_lock(&mutex);
condition = true;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
кул d вы, пожалуйста, помогите мне, пожалуйста, о лучших практиках/ситуациях, в которых мы должны использовать pthread_cond
Что касается ваш второй пример: 1. Вам не нужно запирать мьютексы, чтобы сигнализировать cond-var (хотя вы, безусловно, можете *). 2. Вам ** необходимо ** защелкнуть мьютекс до *, используя * (читать или писать) данные предиката (в вашем случае «условие»). Второй код никогда не устанавливает 'условие', поэтому, хотя сигнал будет происходить, цикл while никогда не прерывается (при условии, что он изначально ошибочен). Надеясь только на то, чтобы быть полезным и не самодовольным, [возможно, это поможет лучше понять] (https://stackoverflow.com/questions/14924469/does-pthread-cond-waitcond-t-mutex-unlock-and-then- блокировка-The-мьютекс/14925150 # 14925150). – WhozCraig