Rumah > Artikel > Operasi dan penyelenggaraan > Bagaimana untuk melaksanakan pengaturcaraan berbilang benang Linux
Pengenalan
Pembolehubah keadaan ialah mekanisme yang menggunakan pembolehubah global yang dikongsi antara utas untuk penyegerakan Ia terutamanya merangkumi dua tindakan: satu utas menunggu untuk keadaan pembolehubah keadaan ditetapkan dan ditutup (tidak lagi menduduki CPU. pada masa ini); Benang lain menjadikan syarat itu benar (memberi isyarat bahawa keadaan itu benar). Untuk mengelakkan perbalahan, penggunaan pembolehubah keadaan sentiasa digabungkan dengan kunci mutex.
Prototaip fungsi
1. Tentukan pembolehubah keadaan
#include <pthread.h> /* 定义两个条件变量 */ pthread_cond_t cond_pro, cond_con;
2. Mulakan dan musnahkan pembolehubah keadaan
#include <pthread.h> int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);int pthread_cond_destroy(pthread_cond_t *cond); /* 初始化条件变量 */ pthread_cond_init(&cond_pro, null); pthread_cond_init(&cond_con, null); /* 销毁条件变量 */ pthread_cond_destroy(&cond_pro); pthread_cond_destroy(&cond_pro);
3 Kod
#include <pthread.h> int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex); int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond); /* 等待条件 */ /* 注意:pthread_cond_wait为阻塞函数。解开锁,再等待。等条件满足时,需要抢到锁,才可以被唤醒*/ pthread_cond_wait(&cond_pro,&mutex); /* 激发条件 */ /* 所有因为不满足条件的线程都会阻塞在条件变量cond_pro中的一个队列中 */ /* 以广播方式,通知所有被阻塞的所有线程 */ pthread_cond_broadcast(&cond_pro); /* 以signal方式,只通知排在最前面的线程 */ pthread_cond_signal(&cond_pro);
Nota
Sama ada dalam utas pengeluar atau utas pengguna. Syarat penghakiman yang ditanda dengan warna kuning mesti menggunakan while. Mengambil urutan pengeluar sebagai contoh, apabila i>=cell, iaitu, apabila i penuh, pthread_cond_wait(&cond_cno,&mutex); Mesti menunggu sehingga urutan pengguna pthread_cond_signal(&cond_pro); Tetapi ia tidak mencukupi untuk pengguna memberi isyarat kepadanya Benang pengeluar yang digantung mesti mendapatkan kunci semula sebelum ia boleh diaktifkan. Walau bagaimanapun, oleh kerana pengeluar tidak boleh mengambil kunci dengan serta-merta apabila pengguna memberi isyarat, nilai i mungkin berubah kepada lebih besar daripada atau sama dengan 10 pada masa ini. Oleh itu anda mesti menggunakan sambil. Jika tidak, i>10 mungkin terhasil.Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengaturcaraan berbilang benang Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!