您的位置:首页 > 其它

编写一个程序,开启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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐