linux 10 次顺序打印ABC

#include <stdio.h>
#include <pthread.h>


#define TIMES 10
int condition = 'A';
pthread_cond_t condA,condB,condC;
pthread_mutex_t mutex;

void* funA(void* a)
{
        int runA =1;
        while(true)
        {
                pthread_mutex_lock(&mutex);
                while(condition != 'A')
                {
                        pthread_cond_wait(&condA,&mutex);//wait是做完事情之前等待,是用来等待某一条件

                        //wait首先操作系统将线程A放到线程等待队列,然后解锁线程。
                }
                printf("this is fun A %d times\n",runA);

                runA++;
                condition = 'B';
                pthread_cond_signal(&condB);//通知下一个指定线程

                pthread_mutex_unlock(&mutex);
                if(runA>10)
                        pthread_exit(NULL);
        }

}

void* funB(void* b)
{
        int runB =1;
        while(true)
        {
                pthread_mutex_lock(&mutex);
                while(condition != 'B')
                {
                        pthread_cond_wait(&condB,&mutex);
                }
                printf("this is fun B %d times\n",runB);

                runB++;
                condition = 'C';
                pthread_cond_signal(&condC);

                pthread_mutex_unlock(&mutex);
                if(runB>10)
                        pthread_exit(NULL);
        }
}

void* funC(void* c)
{
        int runC =1;
        while(true)
        {
                pthread_mutex_lock(&mutex);
                while(condition != 'C')
                {
                        pthread_cond_wait(&condC,&mutex);
                }
                printf("this is fun C %d times\n",runC);

                runC++;
                condition = 'A';
                pthread_cond_signal(&condA);

                pthread_mutex_unlock(&mutex);
                if(runC>10)
                        pthread_exit(NULL);
        }
}

int main(int argc,char** argv)
{

        pthread_t pt[3];
        pthread_cond_init(&condA,NULL);
        pthread_cond_init(&condB,NULL);
        pthread_cond_init(&condC,NULL);

        pthread_mutex_init(&mutex,NULL);

        pthread_create(&pt[0],NULL,funA,NULL);
        pthread_create(&pt[1],NULL,funB,NULL);
        pthread_create(&pt[2],NULL,funC,NULL);

        pthread_join(pt[0],NULL);
        pthread_join(pt[1],NULL);
        pthread_join(pt[2],NULL);

        pthread_cond_destroy(&condA);
        pthread_cond_destroy(&condB);
        pthread_cond_destroy(&condC);

        pthread_mutex_destroy(&mutex);

        return 0;
}

注:下一篇的pthread_cond_wait和pthread_mutex_lock文章中会有对本篇内容的补充跟深入理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值