Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

273
Visualizações
pthread_cond_wait() activando dos subprocesos al mismo tiempo

Estoy tratando de entender mejor cómo usar pthread_cond_wait() y cómo funciona. Solo estoy buscando un poco de aclaración a una respuesta que vi en este sitio.

La respuesta es la última respuesta en esta página.

comprensión de pthread_cond_wait() y pthread_cond_signal()

Me pregunto cómo se vería esto con tres hilos. Imagine Thread 1 quiere decirle a Thread 2 y Thread 3 que se despierten

Por ejemplo

 pthread_mutex_t mutex; pthread_cond_t condition;

Hilo 1 :

 pthread_mutex_lock(&mutex); /*Initialize things*/ pthread_mutex_unlock(&mutex); pthread_cond_signal(&condition); //wake up thread 2 & 3 /*Do other things*/

Hilo 2 :

 pthread_mutex_lock(&mutex); //mutex lock while(!condition){ pthread_cond_wait(&condition, &mutex); //wait for the condition } pthread_mutex_unlock(&mutex); /*Do work*/

Hilo 3 :

 pthread_mutex_lock(&mutex); //mutex lock while(!condition){ pthread_cond_wait(&condition, &mutex); //wait for the condition } pthread_mutex_unlock(&mutex); /*Do work*/

Me pregunto si tal configuración es válida. Digamos que los subprocesos 2 y 3 se basaron en algunas opciones de inicialización que el subproceso 1 necesita procesar.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Primero: si desea que el subproceso n #1 active los subprocesos n #2 y n #3 , debe usar pthread_cond_broadcast .

Segundo: La configuración es válida (con transmisión). Los subprocesos #2 y #3 están programados para activarse e intentarán volver a adquirir la exclusión mutua como parte de la activación. Uno de ellos lo hará, el otro tendrá que esperar a que el mutex se desbloquee nuevamente. Entonces, los subprocesos n #2 y n #3 acceden a la sección crítica secuencialmente (para volver a evaluar la condición).

over 4 years ago · Santiago Trujillo Relatório

0

Si entiendo correctamente, desea que thr # 2 y thr # 3 ("trabajadores") se bloqueen hasta que thr # 1 ("jefe") haya realizado alguna inicialización.

Su enfoque es casi viable, pero necesita transmitir en lugar de señalar, y le falta una variable de predicado separada de su variable de condición. (En la pregunta a la que hace referencia, las variables de predicado y condición tenían un nombre muy similar). Por ejemplo:

 pthread_mutex_t mtx; pthread_cond_t cv; int initialized = 0; // our predicate of interest, signaled via cv ... // boss thread initialize_things(); pthread_mutex_lock(&mtx); initialized = 1; pthread_cond_broadcast(&cv); pthread_mutex_unlock(&mtx); ... // worker threads pthread_mutex_lock(&mtx); while (! initialized) { pthread_cond_wait(&cv, &mtx); } pthread_mutex_unlock(&mtx); do_things();

Eso es lo suficientemente común como para que desee combinar mutex/cv/flag en una sola abstracción. (Para obtener inspiración, consulte Objeto de evento de Python). Barreras POSIX que son otra forma de sincronizar subprocesos: cada subproceso espera hasta que todos los subprocesos "llegan". pthread_once es otra forma, ya que ejecuta una función una vez y solo una vez, sin importar cuántos hilos la llamen.

over 4 years ago · Santiago Trujillo Relatório

0

pthread_cond_signal activa un subproceso (aleatorio) que espera en la variable cond . Si desea activar todos los subprocesos que esperan en esta variable cond , use pthread_cond_broadcast .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda