编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
2016-12-03 16:23
886 查看
#include <stdio.h> #include <pthread.h> #include <stdlib.h> #define NUM 10 pthread_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; }
相关文章推荐
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 笔试题:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推:
- 润和面试题:开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC【转载】