/ Como detectar pthread condition singal antes de esperar? - c ++, multithreading, pthreads, condição

Como detectar singal condição pthread antes de esperar? - c ++, multithreading, pthreads, condição

Eu escrevo um exemplo simples de pthread usando condição para sincronizar dois threads. em algum sinal de situação chamado antes de esperar e bloquear thread de espera para sempre.

Existe maneira de detectar o sinal antes de esperar?

void *Thread1(void *args){
sleep(1);
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond,&mutex);
pthread_mutex_unlock(&mutex);
}

void *Thread2(void *args){
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}

Respostas:

3 para resposta № 1

Pare de usar a variável de condição como sinalmecanismo, como eles não são. Você sempre precisa de uma variável real que armazene os dados. Quando você precisa usar os dados, primeiro verifique seu estado, e se o estado não é o que você quer que seja, você espera que a condição aconteça. Uma vez acordado, você verifica o estado novamente.

Você não pode usar variáveis ​​de condição como sinais.


1 para resposta № 2

As variáveis ​​de condição devem estar sempre emparelhadas com uma condição sobre algum estado compartilhado (chamado de predicado). Um exemplo simples é uma variável de sinalizador compartilhado:

int should_wait = 1;

void *Thread1(void *args)
{
pthread_mutex_lock(&mutex);
while (should_wait)
pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);
}

void *Thread2(void *args){
pthread_mutex_lock(&mutex);
should_wait = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}