博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程 3道题目 一
阅读量:6256 次
发布时间:2019-06-22

本文共 914 字,大约阅读时间需要 3 分钟。

hot3.png

/*

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

#include <stdio.h>

#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>

#define DEBUG 1

int num = 0;

pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t qready=PTHREAD_COND_INITIALIZER;

void* thread_func1(void *arg)

{
    int param = *(int*) arg;
    int i;
    
    for(i = 0; i < 10; i++)
    {
        pthread_mutex_lock(&mylock);
        
        while(param != num)
            pthread_cond_wait(&qready, &mylock);
        
        printf("%c", param + 'A');
        num = (num + 1) % 3;
        
        pthread_mutex_unlock(&mylock);
        pthread_cond_broadcast(&qready);
    }
    
    return (void *)0;
}

int main()

{
    int i;
    pthread_t tid[3];
    int work[3];
    void *tret;
    
    for(i = 0; i < 3; i++){
        work[i] = i;
        pthread_create(&tid[i], NULL, thread_func1, (void *) &work[i]);
    }
        
    for(i = 0; i < 3; i++)
        pthread_join(tid[i], &tret);

    return  0;

}

转载于:https://my.oschina.net/leibornsean/blog/1577714

你可能感兴趣的文章
1002. 写这个号码 (20)(数学啊 ZJU_PAT)
查看>>
【LeetCode】224. Basic Calculator
查看>>
Keil V4.72升级到V5.1X之后
查看>>
Google CFO 辞职信
查看>>
POJ2771_Guardian of Decency(二分图/最大独立集=N-最大匹配)
查看>>
Scala深入浅出实战经典之 List伴生对象操作方法代码实战.
查看>>
php 批量处理post数据
查看>>
RESTful架构详解(转)
查看>>
xcode 在哪里新建category、protocol等文件
查看>>
flash flex 程序出现错误 Error #2032
查看>>
【数据库】主键、外键、索引
查看>>
C#解析HTML
查看>>
导出/打印项目数据报表需要设置IE浏览器
查看>>
8个强大的基于Bootstrap的CSS框架
查看>>
MAC OSX在视图port哪个程序占用,杀死进程的方法
查看>>
Linux中select poll和epoll的区别
查看>>
图像识别引擎-引擎收集知识地图~
查看>>
【面试】如何找到迷宫出口
查看>>
iscroll5实现下拉加载更多
查看>>
hdu1753()模拟大型实景数字相加
查看>>