cari

Rumah  >  Soal Jawab  >  teks badan

linux - masalah cond dalam pthread

Saya menghadapi masalah semasa saya belajar pthread, saya tidak pasti mengenainya, jadi saya akan menyiarkan kod tersebut terlebih dahulu

#include <pthread.h>
#include <stdio.h>#include <unistd.h>

pthread_cond_t cond;
pthread_mutex_t mutex;

void *Test(void *arg) {
  pthread_mutex_lock(&mutex);
  while (1) {
    pthread_cond_wait(&cond, &mutex);
    printf("Got notified\n");
    break;
  }
  pthread_mutex_unlock(&mutex);
  return NULL;
}

int main() {
  pthread_cond_init(&cond, NULL);
  pthread_mutex_init(&mutex, NULL);
  pthread_t t;
  pthread_create(&t, NULL, Test, NULL);
  sleep(1);
  pthread_mutex_lock(&mutex);
  pthread_cond_signal(&cond);
  pthread_mutex_unlock(&mutex);
  pthread_join(t, NULL);
  printf("Exit\n");
}

Jika anda mengulas tidur(1), anda akan terperangkap dalam penantian yang tidak terhingga. Jika anda menambahnya (saya secara peribadi berpendapat ia adalah untuk memastikan bahawa utas lain sudah menunggu untuk bangun sebelum isyarat utas utama), anda boleh mengeluarkan dua ayat log secara normal dan keluar. Punca fenomena ini boleh difahami sebagai kerana benang jatuh ke dalam tidur kerana cond_wait Bolehkah ia dikejutkan hanya dengan memberi isyarat cond selepas ia tidur? Saya mencari dalam talian dan tidak menemui sebarang artikel yang menyatakannya secara khusus. Harap anda boleh memberi saya nasihat. Atau bantu saya mengesahkan, untuk cond, dengan mengandaikan bahawa thread A mula-mula memanggil cond_signal, dan kemudian B memanggil cond_wait, bolehkah B dikejutkan?

PHP中文网PHP中文网2788 hari yang lalu924

membalas semua(1)saya akan balas

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-30 09:58:48

    Fungsi pthread_cond_signal() hendaklah menyahsekat sekurang-kurangnya satu daripada benang yang disekat pada keadaan pembolehubah keadaan yang ditentukan (jika ada benang disekat pada kod). mati

    不能唤醒。

    balas
    0
  • Batalbalas