#Linux:线程

这篇博客详细介绍了Linux线程的使用,包括pthread_create()用于创建线程,pthread_exit()让线程退出,pthread_join()用于等待线程结束。强调了不能使用exit()退出线程的原因。还讲解了pthread_cancel()如何终止线程,以及必须配合的设置取消状态的函数。文章进一步探讨了信号量操作,如sem_init()、sem_wait()、sem_trywait()、sem_post()和sem_getvalue(),并解释了它们在多线程同步中的作用。最后,线程互斥锁的相关函数pthread_mutex_init()、pthread_mutex_lock()、pthread_mutex_trylock()、pthread_mutex_unlock()和pthread_mutex_destroy()也被提及,用于保护共享资源的安全访问。

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

  1. pthread_create()函数

函数功能

创建线程,并执行相应的线程函数,在该函数执行结束后,此线程结束

头文件

#include <pthread.h>

函数原型

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

函数传入值

thread:线程标识符

attr:线程属性设置

start_toutine:线程执行函数,参数和返回值都为void *

arg:传递给start_routine的参数

函数返回值

成功:0

出错:返回错误码

  1. pthread_exit()函数

函数功能

结束当前线程

头文件

#include <pthread.h>

函数原型

void pthread_exit(void *retval)

函数传入值

retval:线程结束时的返回值,可通过pthread_join函数来接收

// 在使用线程函数时,不能使用exit()函数退出,exit()函数是进程退出函数,通常一个进程包含着若干个线程,如果使用exit()函数,该进程下的所有线程都会结束

  1. pthread_join函数

函数功能

(线程阻塞函数),调用它的函数将一直等待到指定的线程结束为止,再回收等待线程结束状态值

头文件

#include <pthread.h>

函数原型

int pthread_join(pthread_t thread, void **thread_result)

函数传入值

thread:等待线程的标识符

thread_result:用户定义的指针,用来接收被等待线程结束时的返回值(不为NULL时)

函数返回值

成功:0

出错:返回错误码

// pthread_create()函数和pthread_join()函数一般成对出现

  1. pthread_cancel()函数

函数功能

在一个线程中终止另一个线程

头文件

#include <pthread.h>

函数原型

int pthread_cancel(pthread_t thread)

函数传入值

thread:要取消的线程标识符

函数返回值

成功:0

出错:返回错误码

// pthread_cancel()函数是终止其他线程的执行,但被结束的线程内部需要先调用pthread_setcancel()函数和pthread_setcancelytpe()函数设置相应的取消状态

  1. sem_init()函数

函数功能

初始化信号量

头文件

#include <semaphore.h>

函数原型

int semsem_init(sem_t *sem, int pshared, unsigned int value)

函数传入值

sem:信号量对象

pshared:决定信号量能否在进程间共享。

value:信号量初始化值

函数返回值

成功:0

出错:-1

  1. sem_wait()函数

函数功能

获取信号量,若不成功则阻塞

头文件

#include <pthread.h>

函数原型

int sem_wait(sem_t *sem)

函数传入值

sem:信号量对象

函数返回值

成功:0

出错:-1

// sem_wait()函数和sem_trywait()函数相当于P操作,在信号量大于零时,他们将信号量的值-1;在信号量的值为零时,sem_wait()函数将会阻塞线程,而sem_trywait()函数则立即返回

  1. sem_trywait()函数

函数功能

获取信号,若不成功立即返回

头文件

#include <pthread.h>

函数原型

int sem_trywait(sem_t *sem)

函数传入值

sem:信号量对象

函数返回值

成功:0

出错:-1

  1. sem_post()函数

函数功能

释放信号量

头文件

#include <pthread.h>

函数原型

int sem_post(sem_t *sem)

函数传入值

sem:信号量对象

函数返回值

成功:0

出错:-1

// sem_post()函数相当于V操作,他将信号量的值+1,同时唤醒等待的线程

  1. sem_getvalue()函数

函数功能

获取信号量的值

头文件

#include <pthread.h>

函数原型

inr sem_getvalue(sem_t *sem)

函数传入值

sem:信号量对象

函数返回值

成功:0

出错:-1

  1. sem_destroy()函数

函数功能

删除信号量

头文件

#include <pthread.h>

函数原型

int sem_destroy(sem_t *sem)

函数传入值

sem:信号量对象

函数返回值

成功:0

出错:-1

  1. pthread_mutex_init()函数

函数功能

初始化互斥锁

头文件

#include <pthread.h>

函数原型

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)

函数传入值

mutex:互斥锁

mutexattr:互斥锁属性,NULL表示缺省属性

函数返回值

成功:0

出错:返回错误码

  1. pthread_mutex_lock()函数

函数功能

对互斥锁上锁,若不成功则阻塞

头文件

#include <pthread.h>

函数原型

int pthread_mutex_lock(pthread_mutex_t *mutex)

函数传入值

mutex:互斥锁

函数返回值

成功:0

出错:-1

  1. pthread_mutex_trylock()函数

函数功能

对互斥锁上锁,若不成功(线程已被锁定)则将立即返回;否则,对其上锁

头文件

#include <pthread.h>

函数原型

int pthread_mutex_trylock(pthread_mutex_t *mutex)

函数传入值

mutex:互斥锁

函数返回值

成功:0

出错:-1

  1. pthread_mutex_unlock()函数

函数功能

对互斥锁解锁

头文件

#include <pthread.h>

函数原型

int pthread_mutex_unlock(pthread_mutex_t *mutex)

函数传入值

mutex:互斥锁

函数返回值

成功:0

出错:-1

  1. pthread_mutex_destroy()函数

函数功能

删除互斥锁

头文件

#include <pthread.h>

函数原型

int pthread_mutex_destroy(pthread_mutex_t *mutex)

函数传入值

mutex:互斥锁

函数返回值

成功:0

出错:-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值