#include <QCoreApplication>#include <QThread>#include <QMutex>#define N 10QMutex mA;QMutex mB;QMutex mC;QMutex mD;//Функция загружающая CPUdouble f() { double x; for (double k = 0; k < 110; k += 0.00005) x += k * sin(k) * exp(k); return x;}//Функции, которые будут выполняться в потоках и выводить соответствующие буквы в циклеvoid A() { mA.lock(); for (int i = 1; i <= N; i++) { f(); putchar('A'); if (i == 4) { mA.unlock(); } }}void C() { mC.lock(); for (int i = 1; i <= N; i++) { f(); putchar('C'); if (i == 2) { mC.lock(); } }}void B() { mA.lock(); for (int i = 1; i <= N; i++) { f(); putchar('B'); if (i == 1) { mB.lock(); } }}void D() { mA.lock(); for (int i = 1; i <= N; i++) { f(); putchar('D'); } mD.lock();}int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); QThread pA; QObject::connect( & pA, & QThread::started, A); QThread pC; QObject::connect( & pC, & QThread::started, C); QThread pB; QObject::connect( & pB, & QThread::started, B); QThread pD; QObject::connect( & pD, & QThread::started, D); pA.start(QThread::TimeCriticalPriority); pB.start(QThread::TimeCriticalPriority); pC.start(QThread::TimeCriticalPriority); pD.start(QThread::TimeCriticalPriority); return a.exec();}