前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言多线程运行详解

C语言多线程运行详解

作者头像
里克贝斯
发布2021-05-21 16:11:54
2.4K0
发布2021-05-21 16:11:54
举报
文章被收录于专栏:图灵技术域图灵技术域

pthread_t:用来定义一个线程类型的变量

用法 pthread_t x1;

pthread_create:建立线程,它有4个参数

pthread_create(&temp, NULL, print_b, NULL);

第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。这里,我们的函数thread不需要参数,所以最后一个参数设为空指针。第二个参数我们也设为空指针,这样将生成默认属性的线程。

pthread_join:用来等待一个线程的结束,也可以理解为线程开始

第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。

pthread_join(threadPool[i], &result);

pthread_exit:一个线程的结束有两种途径,一种函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现

下面代码是C语言多(3个及以上)线程(建立线程池)实现:

就像生产者和消费者问题一样,需要多个生产者和消费者。

C

代码语言:javascript
复制
#include <stdio.h>
#include <pthread.h>
#include <windows.h>


void * print_a(void *a){
    int i;
    for(i = 0;i < 10; i++){
        Sleep(1000);
        printf("aa\n");
    }
    return NULL;

}//1号进程

void * print_b(void *b){
    int i;
    for(i=0;i<20;i++){
        Sleep(1000);
        printf("bb\n");
    }
    return NULL;
}//2号进程


int main()
{
    int aNum=5;
    int bNum=3;
    pthread_t threadPool[aNum+bNum];//创建一个线程池,大小为aNum+bNum

    int i;
    for(i = 0; i < aNum; i++){
        pthread_t temp;
        if(pthread_create(&temp, NULL, print_a, NULL) == -1){
            printf("ERROR");
            exit(1);
        }
        threadPool[i] = temp;
    }//创建a进程放入线程池


    for(i = 0; i < bNum; i++){
        pthread_t temp;
        if(pthread_create(&temp, NULL, print_b, NULL) == -1){
            printf("ERROR");
            exit(1);
        }
        threadPool[i+aNum] = temp;
    }//创建b进程放入线程池


    void * result;
    for(i = 0; i < aNum+bNum; i++){
        if(pthread_join(threadPool[i], &result) == -1){
            printf("fail to recollect\n");
            exit(1);
        }
    }//运行线程池
    return 0;
}

结果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档