C++ (Qt)class storage{ QReadWriteLock lock; QList <int> list;public: int getLast() {lock.lockForRead();i = list.last(); lock.unlock(); return i;} void addLast(int i) {lock.lockForWrite(); list.push_back(i); lock.unlock();}};
#include <iostream>#include <QThread>#include <QList>#include <QReadWriteLock>//Дефинируем класс состоящий из FIFO + lock для межпоточного обмена даннымиclass MyQueue{ QReadWriteLock lock; QList <int> list;public: int i; int getLast() {lock.lockForRead();i = list.last(); lock.unlock(); return i;} void addLast(int i) {lock.lockForWrite(); list.push_back(i); lock.unlock();}};//Дефинируем класс MyThread полученный из QThreadclass MyThread : public QThread {public: MyThread( std::string a = "MyThread" ); MyQueue myQueue; //внутри нити создаём нашу очередьprivate: std::string name; virtual void run();};//Как я понимаю это конструкторMyThread::MyThread( std::string a ) : name(a){}//Перезагружаем функцию run() тем, что нить должна делать после запускаvoid MyThread::run(){ int b = 1; myQueue.addLast(b); b = myQueue.getLast(); std::cout << name << b << std::endl;}int main(){ MyThread a("A"); MyThread b("B"); a.start(); b.start(); a.wait(); b.wait();}
class MyThread : public QThread { Q_OBJECTpublic: MyThread(MyQueue *queue, QObject *parent = 0);private: MyQueue *myQueue; protected: void run();};
MyThread::MyThread(MyQueue *queue, QObject *parent) : QThread(parent), myQueue(queue){}
void MyThread::run(){ int b = 1; myQueue->addLast(b); b = myQueue->getLast(); std::cout << b << std::endl;}
int main(){ MyQueue mq; MyThread a(&mq); MyThread b(&mq); a.start(); b.start(); a.wait(); b.wait();}
C++ (Qt)int i;int getLast() {lock.lockForRead();i = list.last(); lock.unlock(); return i;}void addLast()...