#include <iostream> #include <pthread.h> #include <string> #include <unistd.h> usingnamespace std; int Number =0; pthread_mutex_t NMutex; pthread_cond_t NCond; void*thread1(void*arg) ...{ pthread_detach(pthread_self()); pthread_mutex_lock(&NMutex); while (Number <=0 )//等待主线程读入Number pthread_cond_wait(&NCond, &NMutex); int Count = Number; int Sum =1; for (int i =1; i < Count; i++) Sum += i; cout <<"count by thread1 is "<< Sum << endl; pthread_mutex_unlock(&NMutex); return NULL; } void*thread2(void*arg) ...{ pthread_detach(pthread_self()); pthread_mutex_lock(&NMutex); while (Number <=0 )//等待主线程读入Number pthread_cond_wait(&NCond, &NMutex); int Count = Number; int Sum =1; for (int i =1; i < Count; i++) Sum += i; cout <<"count by thread2 is "<< Sum << endl; pthread_mutex_unlock(&NMutex); return NULL; } int main(int argc, char* argv[]) ...{ pthread_mutex_init(&NMutex, NULL); pthread_cond_init(&NCond, NULL); pthread_t p1, p2; pthread_create(&p1, NULL, thread1, NULL); pthread_create(&p2, NULL, thread2, NULL);
//begin input
pthread_mutex_lock(&NMutex);
cout <<"input a number "; cin >> Number; pthread_mutex_unlock(&NMutex); pthread_cond_signal(&NCond); //end input
pthread_exit(NULL); }
运行结果: input a number 5 count by thread1 is 11 count by thread2 is 11