C的线程库

本文介绍了Linux下C语言中的线程概念,包括进程与线程的区别,以及pthread_create、pthread_exit和pthread_join等线程库函数的使用。重点讲述了并发与并行的含义,并给出了实际的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习的B站up主“爱编程的大丙”(https://subingwen.cn/linux/thread/)
关于LinuxC语言线程库。总结一下昨天学的内容。
首先是进程线程的概念,进程是系统资源分配的最小单位,而线程是CPU调用的最小单位;进程有自己独立的一块内存空间,多个线程可以共享这一个进程的空间(类似一个宿舍的舍友),并且每个线程有自己单独的空间(每个人有自己的床位),线程同时共享进程的全局区、代码区、堆区(宿舍的公共区域)。
单线程与多线程占用CPU时间片

并发与并行的概念:
有一副生动的图来自up主网页的教程,很好理解并区分这两个概念(如下图)

并发:即多个线程同一个时间段轮流抢占CPU的时间片,因为硬件资源只有一个;
并行parallel:多个线程在不同的CPU核上同时运行,真正的parallel。
并发和并行
C语言的线程函数库的使用:

#include<thread.h>
pthread_t pthread_self(void);	//获取当前线程的Id
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);
//创建线程,第一个传线程id,第二传属性,第三个传线程函数的指针,第四个传函数的参数

注意编译时要加上线程动态库

$gcc pthread_create.c -lpthread

注意,线程创建后,在没有干扰的情况下,主线程的生命周期结束,子线程也会被回收。为了子线程完整地执行,可以在主线程中加sleep()函数挂起。

void pthread_exit(void *retval);
//线程退出函数,只要调用该函数当前线程就马上退出了,并且不会影响到其他线程的正常运行,不管是在子线程或者主线程中都可以使用。
//有一个void*返回值用于join函数接收
int pthread_join(pthread_t thread, void **retval);
//阻塞函数,用于等待子线程退出,进行资源的回收
//类似于进程的wait()
//第二个参数为一个指针的地址,用于传出pthread_exit()的返回值
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值