linux - masalah cond dalam pthread
PHP中文网
PHP中文网 2017-06-30 09:56:48
0
1
891

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中文网

认证高级PHP讲师

membalas semua(1)
女神的闺蜜爱上我

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

不能唤醒。

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan