Есть несколько потоков, задача:
1. Когда какой-то поток выполняет метод Write, все остальные потоки стоят и ждут. 2. Если хотябы один поток выполняет метод Read, то метод Write не может быть выполнен, но при этом Read может выполняться несколькими потоками одновременно.
У меня сейчас получается, либо выполняем ТОЛЬКО Write, либо ТОЛЬКО Read.
| Код | QMutex mutexWrite;
class MyThread : public QThread { public: MyThread(int val){this->val = val;} void run();
protected: void Read(); void Write();
int val; };
void MyThread::run() { while(1) { if(val) Read(); else Write(); } }
void MyThread::Read() { mutexWrite.lock(); printf("\nRead"); this->sleep(1); mutexWrite.unlock(); }
void MyThread::Write() { mutexWrite.lock(); printf("\nWrite"); this->sleep(5);
mutexWrite.unlock(); }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);
MyThread* t0 = new MyThread(0); MyThread* t1 = new MyThread(1); MyThread* t2 = new MyThread(1); MyThread* t3 = new MyThread(1); t0->start(); t1->start(); t2->start(); t3->start();
return a.exec(); }
|
|