
作業(yè)社區(qū)
探索學(xué)習(xí)新天地,共享知識資源!
Linkus 的學(xué)生作業(yè):
#include #include #include #include #include static int number = 0;//鍏變韓鍙橀噺 pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; void *thread_handler(void *arg) { int cnt = atoi((char *)arg); int i,tmp; for(i = 0;i < cnt;i++){ pthread_mutex_lock(&mtx); printf("Thread [%ld] produce : %d\n",pthread_self(),++number); pthread_mutex_unlock(&mtx); } pthread_exit((void *)0); } int main(int argc,char *argv[]) { pthread_t tid; int i; int err; int total_of_produce = 0;//鎬葷殑鐢熶駭浜у搧鐨勬暟閲? int total_of_consume = 0;//鎬葷殑娑堣垂浜у搧鐨勬暟閲? bool done = false; for (i = 1;i < argc;i++){ total_of_produce += atoi(argv[i]); // 鐢熶駭鏁伴噺鐨勬€誨拰 err = pthread_create(&tid,NULL,thread_handler,(void *)argv[i]); if (err != 0) { perror("pthread_create()"); exit(EXIT_FAILURE); } } for (;;){ pthread_mutex_lock(&mtx); while(number > 0){ total_of_consume++; // 娑堣垂浜у搧鎬繪暟 printf("Consume : %d\n",--number); done = total_of_consume >= total_of_produce; // 鍒ゆ柇娑堣垂鑰呮暟閲忎笌浜у搧鏁伴噺 sleep(1); } pthread_mutex_unlock(&mtx); if(done) break; } return 0; }





Linkus 的學(xué)生作業(yè):
#include #include #include #include static int global = 0; static pthread_mutex_t mutex; // = PTHREAD_MUTEX_INITIALIZER; void *do_thread(void *arg) { int loops = *(int *)arg; int i,tmp = 0; for (i = 0;i < loops;i++){ pthread_mutex_lock(&mutex); tmp = global; tmp++; global = tmp; pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } int main(int argc,char *argv[]) { int err,i = 0; pthread_t tid[2] = {0}; int loops = 0; if (argc != 2){ fprintf(stderr,"Usage : < %s > < count loops>\n",argv[0]); exit(EXIT_FAILURE); } pthread_mutex_init(&mutex,NULL); loops = atoi(argv[1]); for (i = 0;i < 2;i++){ err = pthread_create(&tid[i],NULL,do_thread,&loops); if (err != 0){ fprintf(stderr,"[ERROR] pthread_create(): < %s > \n",strerror(err)); exit(EXIT_FAILURE); } } pthread_join(tid[0],NULL); pthread_join(tid[1],NULL); pthread_mutex_destroy(&mutex); printf("global = %d\n",global); return 0; }




