Linux多线程编程——线程

本文介绍了Linux系统中线程的概念,作为进程内独立的执行路线,线程间共享资源,需要同步操作。重点讨论了多线程编程中的互斥锁和信号量,互斥锁确保对共享资源的原子操作,信号量用于进程或线程的同步和互斥。并提供了相关函数说明和使用实例。

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

一、线程概述

       前面讲到,进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换等操作时需要有比较复杂的上下文切换等动作。为了进一步减少处理机的空转时间,支持多处理器以及减少上下文切换开销,进程在演化过程中出现了另一个概念——线程。它是进程内独立的一条运行路线、处理器调度的最小单元,也可以称之为轻量级进程。线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享。因此线程的上下文切换开销比创建进程小很多。

       一个进程可以有多个线程,也就是多个线程共享一个进程的资源和地址空间。因此,任何线程对系统资源的操作都会给其他线程带来影响。所以,在多线程编程中同步是非常重要的。

二、线程编程

1.线程基本编程

(1)函数说明

(1) pthread_create():创建线程
(2) pthread_exit():线程退出
(3) pthread_join():将当前线程挂起并等待线程结束,线程结束时资源被收回
(4) pthread_cancel():用于同一进程内一个线程要终止另一个线程,被终止的线程要调用以下两个函数
(5) pthread_setcancel():设置线程是否可以被其他线程调用pthread_cancel函数取消/终止。
(6) pthread_setcanceltype():设置当前线程的“可取消类型”,并且将先前的类型返回到oldtype引用中。

(2)函数格式

pthread_create()函数语法要点
所需头文件 #include <pthread.h>
函数原型 int pthread_create((pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)),void *arg)
函数传入值 thread:线程标识符
attr:线程属性设置,通常取为NULL
start_routine:线程函数的起始地址,是一个以指向void的指针作为参数和返回值的函数指针
arg:传递给start_routine的参数
函数返回值 成功:0
出错:返回错误码
pthread_exit()函数语法要点
所需头文件 #include <pthread.h>
函数原型 void pthread_exit(void *retval)
函数传入值 retval:线程结束时的返回值,可由其他函数如pthread_join()来获取
pthread_join()函数语法要点
所需头文件 #include <pthread.h>
函数原型 int pthread_join((pthread_t th,void **thread_return))
函数传入值 th:等待线程的标识符
thread_return:用户定义的指针,用来存储被等待线程结束时的返回值(不为NULL时)
函数返回值 成功:0
出错:返回出错码
<
pthread_cancel()函数语法要点
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值