线程的创建与线程间通信(C语言)

本文介绍了C语言中线程的创建、线程间通信的方法,包括线程同步和互斥。线程通过pthread_create函数创建,利用全局变量进行通信,并通过信号量和互斥锁实现同步和互斥,确保数据的安全访问。
摘要由CSDN通过智能技术生成

摘要:线程是如何创建的,线程之间的通信是如何做到的,线程之间通信需要注意什么,线程的同步与互斥是如何使用临界资源的,今天,又是我们一起努力学习的一天,一起来看看。

        什么是线程,昨天我们学习了进程,说到每个进程的地址空间都是相互独立的,每个进程都有一个stask_struck。在进行进程切换时,需要不断地刷新cache缓存,比较消耗资源,为了减少这种消耗,就引入了轻量级的进程----线程。

        线程的特点:同一个进程创建的多个线程共用同一个进程的地址空间。当进程创建线程后,原本的进程也叫做线程,成为主线程。

        那么线程又是如何创建的?我们先来看一下创建线程的函数:

#include <pthread.h>

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);

乍一看,这个函数如此复杂,竟然有四个参数。没关系,我们一个一个的来看。

① thread 这个参数代表着线程对象,每个线程对应一个线程对象。

在使用之前得先定义出来,看它类型,可以看出是pthread_t 类型的。

② attr 这是线程属性,默认填缺省属性NULL。

③ void *(*start_routine)(void *)   这个东西看起来复杂,其实就是填函数名,线程用一个函数去封装,所以填的这个函数名就是我们线程的入口。

④  arg 这个是填需要往线程里传递的参数。一次只能传递一个参数,想要传递多个参数的话,可以先定义一个结构体,传递结构体名,不想传递参数就填NULL。

        从函数中可以看出返回值是int 类型的,创建线程成功返回0,失败则返回1,可用于判断线程是否创建成功。

         和进程一样,有创建自然就有结束线程和等待线程。先来看结束线程的函数:

#include <pthread.h>

void pthread_exit(void *reatval);

        就reatval 一个参数,这个参数填的是线程结束时返回的信息,由等待线程函数接收,若不想返回信息,可填NULL。

        等待线程:就是主线程需要进行的操作,因为线程是共用主线程的同一片地址空间,所以假如主线程先结束,那么子线程也随即结束。所以要想主线程在子线程后面结束就必须有这个等待函数 函数如下:

#include <pthread.h>

int pthread_join(pthread_t
  • 16
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值