网络原题:

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

这里设置ITEM=4,即依次打印ABCDABCD……………………

#include <stdio.h>
#include <stdlib.h>
#include<pthread.h>
/*int pthread_create(pthread_t*restrict tidp,* const pthread_attr_t *restrict_attr,* void*(*start_rtn)(void*),void *restrict arg);*/
/*第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。*/
#define ITEM 4
struct {pthread_mutex_t mutex;pthread_cond_t cond;int i;
}test={PTHREAD_MUTEX_INITIALIZER,PTHREAD_COND_INITIALIZER,0
};
void PrintA(void *arg)
{int num=*(int*)arg;int i;//printf("\n线程%d开始工作,我打印的是%c\n",pthread_self(),'A'+num);for(i=0;i<10;i++){pthread_mutex_lock(&test.mutex);while(test.i!=num)pthread_cond_wait(&test.cond,&test.mutex);printf("%c",'A'+num);test.i=(test.i+1)%ITEM;pthread_mutex_unlock(&test.mutex);pthread_cond_broadcast(&test.cond);}//printf("\n线程%d完成任务\n",pthread_self());
}
int main(void) {pthread_t t[ITEM];int i=1;printf("共有%d个线程\n",ITEM);for(i=0;i<ITEM;i++){int *a=(int *)malloc(sizeof(int));*a=i;pthread_create(&t[i],NULL,PrintA,a);}for(i=0;i<ITEM;i++){pthread_join(t[i],NULL);}return EXIT_SUCCESS;
}

运行结果:

共有4个线程
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD

转载于:https://www.cnblogs.com/sklww/p/3492997.html

多线程依次打印abcabc相关推荐

  1. linux多线程顺序打印abc,c++11 多线程依次打印ABC

    并发 练习代码 #include #include #include #include using namespace std; std::mutex mtx; std::condition_vari ...

  2. java多线程循环打印abc,使用java多线程顺序打印“ABCABC”

    一.几个基本概念的区分 1.进程与程序的区分 程序 进程 包含代码部分.数据部分 包含代码部分.数据部分.进程控制块 顺序执行 并发执行 独占资源 共享资源 同步的 异步的 静态的 动态的 (本质区别 ...

  3. Linux编程题:信号量同步三进程依次打印若干次ABC

    三个进程依次打印ABC..... 思路及大致流程如下: 思路取自这位大哥: Linux编程题:创建3个线程分别打印abc,用信号量进行同步_cleverlemon的博客-CSDN博客 这位大哥写的是线 ...

  4. java多线程交替打印_java实现多线程交替打印

    本文实例为大家分享了java实现多线程交替打印的具体代码,供大家参考,具体内容如下 notify+wait实现 import org.junit.Test; import java.util.conc ...

  5. 多线程顺序打印的5种解法

    多线程同步的方式有许多,有传统的synchronized锁,还可以使用lock锁,下面列举多线程顺序打印的5种解法,算作对线程同步的一个总结. 文章目录 经典面试题 多种解法 使用 Lock 使用 w ...

  6. java同时启动多个 无法打印_java实现多线程交替打印两个数

    本文实例为大家分享了java实现多线程交替打印两个数的具体代码,供大家参考,具体内容如下 方法1.使用wait和notify package com.thread; public class T01 ...

  7. java多线程交替打印abc

    你可以使用 synchronized 和 wait / notify 来实现多线程交替打印abc. 以下是一个示例代码: public class PrintABC {private intstate ...

  8. LeetCode 多线程 1116. 打印零与奇偶数

    1116. 打印零与奇偶数 Ideas 有几个线程就用几个信号量,最先开始的信号量初始化为1,其它初始化为0,然后根据条件判断实现同步. 多线程的问题好多都是:锁自己,解锁别人. Code from ...

  9. 阿里最喜欢问的多线程顺序打印的5种解法!

    Keeper导读 大家在换工作面试中,除了一些常规算法题,还会遇到各种需要手写的题目,所以打算总结出来,给大家个参考. 全文 2929 字,剩下的是代码,P6 及以下阅读只需要 8 分钟,高 P 请直 ...

最新文章

  1. python一次性输入10个数_python如何一次性输入多个数
  2. POI异步导入Excel兼容xsl和xlsx
  3. OpenCASCADE:Foundation Classes使用句柄编程
  4. LevelDB 之 arena
  5. 130701基础练习-first
  6. php 网站域名怎么更换,教你如何快速给网站更换域名,简单粗暴!
  7. 网页中使用的特殊字体(webdings, wingdings 2)
  8. SuseLinux详解(2)——网络设置静态IP 网关 DNS的方法
  9. http://www.blogjava.net/heyang/archive/2010/12/02/
  10. 流媒体服务器设计文档,流媒体服务器设文档.doc
  11. 微信支付v3 php 源码,求微信支付wxpayv3服务端完整代码
  12. HTML中播放提示音
  13. 四叶草关闭啰嗦模式_教你如何解决 Win7 64位卡LOGO(四叶草)
  14. adobe pdf for linux,Linux PDF阅读软件Adobe Reader 9.5.5发布( for linux)
  15. php excel 高度,PHPExcel,自动调整行高
  16. 解忧云SMS短信服务平台系统 短信发送系统源码 全解密随时可以二开无后门
  17. 2个大厂 100亿级 超大流量 红包 架构方案
  18. 程序员常用刷题网站分享
  19. 目标检测(四):SSD之Pytorch源码解读
  20. java的含义是什么

热门文章

  1. POI导入数据的过程中,遇到读取以科学计数法显示的数据
  2. 使用C#控制远程计算机的服务[转]
  3. c++ 课程设计之车票管理系统
  4. Ecipse:calculating requirements and dependencies(长时间阻塞问题)
  5. 将视频抽取成图片,并对图片进行批量命名opencv代码
  6. 计算机体系结构在线读,计算机体系结构new.ppt
  7. (8)VTK 鼠标左右键控制模型旋转
  8. mysql存储过程 begin_MySQL存储过程的BEGIN和END
  9. cmp linux 命令,比较文件Linux基本命令:cmp
  10. openim php sdk,imsdk_restapi-php-sdk