#include <QCoreApplication>#include <QThread>class thread : public QThread{public: int st,end,a,ans; int f(){ int answ=0; for(int i=st;i<end;i++) answ+=a; return answ; } void run(){ ans=f(); }};int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); int a,n,m,i; scanf("%i %i %i",&a,&n,&m); int *d=new int[m]; thread *t=new thread[m]; for(i=0;i<m;i++){ d[i]=(i+1)*n/m; if(i==0){ t[i].st=0; t[i].end=d[i]; } else if(i==(m-1)){ t[i].st=d[i-1]; t[i].end=n; } else{ t[i].st=d[i-1]; t[i].end=d[i]; } t[i].a=a; } printf("\nstarted\n\n"); for(i=0;i<m;i++) t[i].start(QThread::HighPriority); return app.exec();}
C++ (Qt)// ждем пока все нитки отработаютfor(i = 0; i < m; i++) t[i].wait(); // суммирует результатыint sum = 0;for(i = 0; i < m; i++) sum += t[i].ans;
void run(){ ans=f(); QMutextLocker locker(&mutex); // mutex должен быть напр глобальной переменной, т.е. один и тот же для всех ниток sum += ans;}
C++ (Qt)#pragma omp parallel for reduction(+: sum)for (int i = 0; i < limit; ++i) sum += DoCalc(i);
#include <QCoreApplication>#include <QThread>#include <QMutex>QMutex mutex;int answer=0;class thread : public QThread{public: int st,end,a,ans; int f(){ int answ=0; for(int i=st;i<end;i++) answ+=a; return answ; } void run(){ ans=f(); // printf("\nst = %i, end = %i, result = %i",st,end,ans); mutex.lock(); answer+=ans; mutex.unlock(); }};int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); int a,n,m,i; scanf("%i %i %i",&a,&n,&m); int *d=new int[m]; thread *t=new thread[m]; for(i=0;i<m;i++){ d[i]=(i+1)*n/m; if(i==0){ t[i].st=0; t[i].end=d[i]; } else if(i==(m-1)){ t[i].st=d[i-1]; t[i].end=n; } else{ t[i].st=d[i-1]; t[i].end=d[i]; } t[i].a=a; } printf("\nstarted\n\n"); for(i=0;i<m;i++) t[i].start(QThread::HighPriority); for(i=0;i<m;i++) t[i].wait(); printf("\nAnswer = %i\n",answer); return app.exec();}
QMutextLocker locker(&mutex);answer+=ans;
mutex.lock(); answer+=ans; mutex.unlock();
#include <QCoreApplication>#include <QThread>#include <QMutex>QMutex mutex;char c;class rthread : public QThread{ void run(){ for(;;){ mutex.lock(); c=getchar(); mutex.unlock(); } }};class wthread : public QThread{ void run(){ for(;;){ mutex.lock(); putchar(c); mutex.unlock(); } }};int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); rthread r; wthread w; r.start(QThread::HighPriority); w.start(QThread::HighPriority); printf("\nStarted\n\n"); return a.exec();}
Mutext