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

使用条件变量来实现:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
static pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER;

static pthread_cond_t condA ;
static pthread_cond_t condB ;
static pthread_cond_t condC ;

void* threadA(void *arg)
{
int a =10;
while(a--)
{
//sleep(2);
//printf("A begin.\n");
pthread_mutex_lock(&mtx);
//printf("A wait.\n");
pthread_cond_wait(&condC,&mtx);
printf("A.\n");
pthread_mutex_unlock(&mtx);
pthread_cond_signal(&condA);
}
}

void* threadB(void *arg)
{
int b=10;
while(b--)
{
//sleep(2);
//printf("B begin.\n");
pthread_mutex_lock(&mtx);
//printf("B wait.\n");
pthread_cond_wait(&condA,&mtx);
printf("B.\n");
pthread_mutex_unlock(&mtx);
pthread_cond_signal(&condB);
}
}

void* threadC(void *arg)

{
int c=10;
while(c--)
{
//sleep(2);
//printf("C begin.\n");
pthread_mutex_lock(&mtx);
//printf("C wait.\n");
pthread_cond_wait(&condB,&mtx);
printf("C.\n");
pthread_mutex_unlock(&mtx);
pthread_cond_signal(&condC);
}
}
int main (void *arg)
{
pthread_t tidA;
pthread_t tidB;
pthread_t tidC;
pthread_cond_init(&condA,NULL);
pthread_cond_init(&condB,NULL);
pthread_cond_init(&condC,NULL);
pthread_create(&tidA,NULL,&threadA,NULL);
pthread_create(&tidB,NULL,&threadB,NULL);
pthread_create(&tidC,NULL,&threadC,NULL);

printf("main begin..\n");
sleep(4);
pthread_cond_signal(&condC);

pthread_join(tidA,NULL);
pthread_join(tidB,NULL);
pthread_join(tidC,NULL);

return 0;
}

Linux 多线程编程 实例 2的更多相关文章

  1. Linux多线程编程实例解析

    Linux系统下的多线程遵循POSIX线程接口,称为 pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.顺便说一下,Linux ...

  2. Linux 多线程编程实例

    一.多线程 VS 多进程 和进程相比,线程有很多优势.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护代码段和数据.而运行于一个进程中的多个线程,他们之间使用相同 ...

  3. Linux 多线程编程 实例 1

    子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码. #include <pthread.h> ...

  4. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

  5. Linux C语言多线程编程实例解析

    Linux系统下的多线程遵循POSIX线程接口,称为 pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.顺便说一下,Linux ...

  6. Linux多线程编程初探

    Linux线程介绍 进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情.有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程 ...

  7. 【操作系统作业-lab4】 linux 多线程编程和调度器

    linux多线程编程 参考:https://blog.csdn.net/weibo1230123/article/details/81410241 https://blog.csdn.net/skyr ...

  8. Linux多线程编程之详细分析

    线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我见到这样一道面试题: 是否熟悉POSIX多线程 ...

  9. Linux多线程编程阅读链接

    1. 进程与线程的一个简单解释(阮一峰) 2. linux 多线程编程 3. Linux 的多线程编程的高效开发经验 (IBM)

随机推荐

  1. 提交form表单不刷新页面案列

    提交form表单不刷新页面其实很简单的,这里拿上传图片来举列,大家有什么其它的方法也欢迎留言告知与我 <form action="" method="post&qu ...

  2. thinkphp3.2设置session的过期时间

    thinkPHP3.2中session的过期时间配置是不能使用的,我们需要修改一下它的配置文件thinkPHP>common>functions.php,找到这一行: if(isset($ ...

  3. Daily Scrum 10.27

    今天是星期天,但大家都没有放松,还是抽出了一定的时间来完成任务.可以感觉出来在编译作业的压力下大家的热情不是很高涨,希望大家坚持下去. 下面是今天的Task统计: 下面是所有迭代的状态:

  4. centos安装php

    1.安装phpyum install php php-devel重启apache使php生效 2.此时可以在目录:/var/www/html/下建立一个PHP文件代码:<?php phpinfo ...

  5. 示例Oracle 10.2.0.1.0升级到10.2.0.4.0一例

    1.查看当前系统版本 [oracle@std Disk1]$ sqlplus '/as sysdba' SQL*Plus: Release - Production on Thu Jan :: Cop ...

  6. 配置非默认端口的监听Listener

  7. bzoj4518: [Sdoi2016]征途--斜率DP

    题目大意:把一个数列分成m段,计算每段的和sum,求所有的sum的方差,使其最小. 由方差*m可以化简得ans=m*sigma(ki^2)-sum[n]^2 很容易得出f[i][j]=min{f[i- ...

  8. numpy使用

    计算矩阵的一些用法: http://www.360doc.com/content/13/1104/17/9934052_326603249.shtml

  9. 关于 calloc 函数使用 与fun 函数

    s=(float *) calloc (1,sizeof(float)); #include "stdio.h"#include "stdlib.h"void ...

  10. dedecms 使用

    初看dedecms的后台界面就是一头雾水.不懂的词语多,什么模型,什么栏目,什么频道,不懂.相比于wordpress的分类category,标签tag,文章post,页面page而言,织梦后台难懂. ...