编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

来源:互联网 发布:权限管理数据库表设计 编辑:程序博客网 时间:2024/04/25 13:25
#include <stdio.h>#include <pthread.h>#include <stdlib.h>#define NUM 10pthread_mutex_t mutex;pthread_cond_t conda;pthread_cond_t condb;pthread_cond_t condc;int floga = 0;int flogb = 0;int flogc = 0;void *thread_a(void *argv){int i = 0;char *p;p = (char *)argv;//printf("%s",p);while(i < NUM){pthread_mutex_lock(&mutex);floga = 1;pthread_cond_wait(&conda,&mutex);floga = 0;//pthread_mutex_unlock(&mutex);printf("%s",p);while(!flogb){    pthread_mutex_unlock(&mutex);sleep(10);    pthread_mutex_lock(&mutex);}pthread_cond_signal(&condb);pthread_mutex_unlock(&mutex);i++;}floga = 1;}void *thread_b(void *argv){int i;char *p;p = (char *)argv;//printf("%s",p);while(i < NUM){pthread_mutex_lock(&mutex);flogb = 1;pthread_cond_wait(&condb,&mutex);flogb = 0;//pthread_mutex_unlock(&mutex);printf("%s",p);while(!flogc){pthread_mutex_unlock(&mutex);sleep(10);pthread_mutex_lock(&mutex);}pthread_cond_signal(&condc);pthread_mutex_unlock(&mutex);i++;}}void *thread_c(void *argv){int i;char *p;p = (char *)argv;//printf("%s",p);while(i < NUM){pthread_mutex_lock(&mutex);flogc = 1;pthread_cond_wait(&condc,&mutex);flogc = 0;//pthread_mutex_unlock(&mutex);printf("%s",p);while(!floga){pthread_mutex_unlock(&mutex);sleep(10);pthread_mutex_lock(&mutex);}pthread_cond_signal(&conda);pthread_mutex_unlock(&mutex);i++;}}int main(){pthread_t A;pthread_t B;pthread_t C;int ret;char *pa = "A";char *pb = "B";char *pc = "C";pthread_mutex_init(&mutex,NULL);pthread_cond_init(&conda,NULL);pthread_cond_init(&condb,NULL);pthread_cond_init(&condc,NULL);ret = pthread_create(&A,NULL,thread_a,(void *)pa);if(ret == -1){printf("pthread_create a error!\n");exit(-1);}ret = pthread_create(&B,NULL,thread_b,(void *)pb);if(ret == -1){printf("pthread_create a error!\n");exit(-1);}ret = pthread_create(&C,NULL,thread_c,(void *)pc);if(ret == -1){printf("pthread_create a error!\n");exit(-1);}sleep(2);pthread_cond_signal(&conda);pthread_join(A,NULL);//printf("\nfinished A!\n");pthread_join(B,NULL);//printf("\nfinished B!\n");pthread_join(C,NULL);//printf("\nfinished C!\n");printf("\nfinished!\n");    return 0;}

0 0
原创粉丝点击