QT多執行緒中的互斥與同步

2021-08-31 10:17:27 字數 2091 閱讀 4505

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

參考自《精通qt4程式設計》。

qt為實現執行緒的同步與互斥,提供了幾個類。

下面主要介紹三個類:

一、qmutex和qmutexlocker

[cpp]view plain

copy

print?

class key  

int createkey()  

int value() const   

private:  

int key;  

qmutex mutex;  

};  

class key    int createkey()    int value() const private:    int key;    qmutex mutex;}; 

二、qsemaphore

[cpp]view plain

copy

print?

#include 

#include 

#include 

const

int datasize = 100000;  

const

int buffersize = 8192;  

int buffer[buffersize];  

qsemaphore freebytes(buffersize);  

qsemaphore usedbytes(0);  

class producer : public qthread  

;  void producer::run()  

}  class consumer : public qthread  

;  void consumer::run()  

fprintf(stderr, "/n");  

}  int main(int argc, char *argv)    

三、qwaitcondition

[cpp]view plain

copy

print?

#include 

#include 

#include 

const

int datasize = 10000;  

const

int buffersize = 8192;  

int buffer[buffersize];  

qwaitcondition bufferempty;  

qwaitcondition bufferfull;  

qmutex mutex;  

int numusedbytes = 0;  

int rindex=0;  

class producer : public qthread  

;  void producer::run()  

}  class consumer : public qthread  

;  void consumer::run()  

printf("/n");  

}  int main(int argc, char *argv)  

producer producer;  

consumer consumera;  

consumer consumerb;  

producer.start();  

consumera.start();  

consumerb.start();  

producer.wait();  

consumera.wait();  

consumerb.wait();  

return 0;  

}  

上面用qsemaphore和qwaitcondition兩個類完成生產者和消費者例項,對

我們實際工作很有益處。

給我老師的人工智慧教程打call!

多執行緒同步與互斥

1.互斥 include include include include include pthread mutex t mutex pthread mutex initializer int lock var 0 time t end time void pthread1 void arg voi...

Qt 多執行緒同步之互斥鎖

qmutex需要配對使用lock 和unlock 來實現 段的保護 qmutexlocker是另外乙個簡化了互斥量處理的類。qmutexlocker建構函式接受乙個互斥量作為引數並將其鎖定,qmutexlocker的析構函式則將此互斥量解鎖,所以在qmutexlocker例項變數的生存期內的 段得到...

Linux 多執行緒同步與互斥

在linux的多執行緒同步與互斥中,主要提供了訊號量的同步方式,以及互斥鎖和條件變數等訪問共享資源的方式。訊號量主要用於執行緒間的同步操作,兩個執行緒協同完成一件事情,在乙個執行緒完成乙個動作後,該需要通知另外乙個執行緒,進行相應的操作。1.1 需要包含的標頭檔案 include1.2 定義乙個全域...