精选文章 多线程例程

多线程例程

作者:tianyingang 时间: 2019-11-06 06:08:01
tianyingang 2019-11-06 06:08:01
#include 
#include 
#include 
#include 
#include 

bool flag = true;
void * thread_handler1(void * para){
    while(flag){
        printf("thread handler1 is running.\n");
        sleep(1);
    }

    printf("thread 1 exit\n");
    pthread_exit(0);
}

void * thread_handler2(void * para){
    while(flag){
        printf("thread handler2 is running.\n");
        sleep(1);
    }

    printf("thread 2 exit\n");
    pthread_exit(0);
}

void * thread_handler3(void * para){
    while(flag){
        printf("thread handler3 is running.\n");
        sleep(1);

    }

    printf("thread 3 exit\n");
    pthread_exit(0);
}

void * thread_handler4(void * para){
    while(flag){
        printf("thread handler4 is running.\n");
        sleep(1);
    }

    printf("thread 4 exit\n");
    pthread_exit(0);
}


int
main(int argc,char **argv)
{
    pthread_t thread1,thread2,thread3,thread4;

    pthread_create(&thread1,NULL,thread_handler1,NULL);
    pthread_create(&thread2,NULL,thread_handler2,NULL);
    pthread_create(&thread3,NULL,thread_handler3,NULL);
    pthread_create(&thread4,NULL,thread_handler4,NULL);
    while(flag){
        char ch;

        ch = getchar();
        printf("ch = %c\n",ch);
        if(ch == 'a'){
            break;
        }
    }
    flag = false;

    sleep(10);
    printf("thread 1 end\n");
    pthread_cancel(thread1);
    pthread_join(thread1,NULL);

    printf("thread 2 end\n");
    pthread_cancel(thread2);
    pthread_join(thread2,NULL);

    printf("thread 3 end\n");
    pthread_cancel(thread3);
    pthread_join(thread3,NULL);

    printf("thread 4 end\n");
    pthread_cancel(thread4);
    pthread_join(thread4,NULL);


    exit(0);
}

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:javax.crypto.BadPaddingException: Given final block not properly padded解决方案

下一篇:1、SpringBoot自定义拦截器-跨域

您可能感兴趣

  • JAVA核心类库--3、可变字符串类和日期相关类

    1、可变字符串类 1.1、基本概念 由于String类描述的字符串内容是个常量不可改变,当需要在Java代码中描述大量类似的字符串时,只能单独申请和存储,此时会造成内存空间的浪费。 为了解决上述问题,可以使用java.lang.StringBuilder类和java.lang.StringBuffer类来描述字符序列可以改变的字符串,如:"ab"。 StringBuffer类是从jdk1.0...

  • 可信任的多方计算和验证仿真:一种扩展区块链的方法

    名词介绍: 多代理系统:是由多个代理共同合作来组成的。其基本单元是代理,代理可以与其所在环境进行互动(这个我理解有点儿分布式的意思) 存在的问题:代理和代理之间彼此会产生信任问题,例如某些代理是带有恶意的,或者代理的种种原因可能造成不可信的情况。 出发点(意图):为了解决上面的这个问题,保证代理的计算完整性。从而创建了可靠的分布式计算平台。 信任有两种验证方式: Validation:仿真保...

  • Java 基础之Autowired 是否是自动注入

    Java 基础之Autowired 是否是自动注入 相信很多人对Autowired 注解理解不深入,或者是认为此注解就是spring的自动注入。相信看完本篇文章,你会有更加不一样的理解。 首先我们先看下什么是手动注入?在我们的spring应用程序中,定义多个类,其中某些类依赖某些类,xml中要描述类与类之间的依赖关系,这种由程序员定义,并且描述好依赖关系的用法,我们称之为手动注入。我们看个例...

  • 漫谈 SLAM 技术(上)

    转自:https://zhuanlan.zhihu.com/p/135955964 导语 随着最近几年机器人、无人机、无人驾驶、VR/AR的火爆,SLAM技术也为大家熟知,被认为是这些领域的关键技术之一。本文对SLAM技术及其发展进行简要介绍,分析视觉SLAM系统的关键问题以及在实际应用中的难点,并对SLAM的未来进行展望。 1. SLAM技术 SLAM(Simultaneous Local...

  • JVM的年轻代与垃圾回收

    JVM的年轻代与垃圾回收 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对...

  • pytorch triple-loss

    一、Triplet结构: triplet loss是一种比较好理解的loss,triplet是指的是三元组:Anchor、Positive、Negative: 整个训练过程是: 首先从训练集中随机选一个样本,称为Anchor(记为x_a)。 然后再随机选取一个和Anchor属于同一类的样本,称为Positive (记为x_p) 最后再随机选取一个和Anchor属于不同类的样本,称为Negat...

  • SIP语音环境中十大经典问题及解决办法

    在VOIP的环境中,特别是基于SIP通信的环境中,我们经常会遇到一些非常常见的问题,例如,单通,30秒就断线,注册问题,回声等。这些问题事实上都有非常直接的排查方式和解决办法,用户可以按照一定的排查方式,工具非常高效地解决这些问题。但是,因为读者技术水平参差不齐,网络上的很多技术也不完整。笔者今天系统归纳了这些问题。根据一些用户的使用环境和用户经常遇到一些问题,我们列举了以下十个在SIP呼叫...

  • oracle 裸磁盘扩容

    云服务器存储扩容详解 2020-01-20阅读 6640 环境说明 Linux操作系统:CentOS Linux release 7.6.1810 (Core) 平台环境:腾讯云CVM,CBS 本教程相关视频教程:腾讯云大学-云服务器存储扩容 1. 存储扩容概述 随着业务的发展,业务数据不停的增长,原有的磁盘空间可能会出现磁盘空间不够用的情况,因此,需要对磁盘空间进行扩容,以满足业务数据增长...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。