栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux下C/C++多线程编程pthread库相关函数总结(线程、锁、信号量等)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux下C/C++多线程编程pthread库相关函数总结(线程、锁、信号量等)

对Linux下C或C++语言在多线程编程时所用到的pthread库中的相关函数进行了总结。

头文件:#include

注意:在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非linux系统的默认库。

文章目录
  • -------------------------线程--------------------------
    • pthread_create:创建线程
    • pthread_join:等待线程结束
    • pthread_exit: 结束线程
  • -------------------------锁--------------------------
    • pthread_mutex_init:初始化互斥锁
    • pthread_mutex_lock:上锁
    • pthread_mutex_trylock:上锁
    • pthread_mutex_unlock:解锁
    • pthread_mutex_destroy:销毁锁
  • ------------------------信号量---------------------------
    • pthread_cond_init :初始化条件变量
    • pthread_cond_wait:条件等待
    • pthread_cond_timedwait:计时等待
    • pthread_cond_broadcast:解除条件变量的等待
    • pthread_cond_signal:使等待的线程脱离阻塞状态
    • pthread_cond_destroy:销毁条件变量
  • -------------------------key--------------------------
    • pthread_key_create
    • pthread_key_delete
    • pthread_setspecific
    • pthread_getspecific
  • ---------------------------------------------------
    • pthread_once

-------------------------线程-------------------------- pthread_create:创建线程

函数原型:

int pthread_create (pthread_t * tidp, const pthread_attr_t * attr, void * (start_rtn)(void), void *arg);

各个参数说明:
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数

返回值:成功返回0,否则返回错误码。

pthread_join:等待线程结束

函数原型:

int pthread_join(pthread_t thread, void **retval);

参数:
pthread_t thread: 被连接线程的线程号
void **retval : 指向一个指向被连接线程的返回码的指针的指针

函数作用:
pthread_join()函数会一直阻塞调用线程,直到指定的线程tid终止,保证了指定的线程一定能执行完,然后被回收。

返回值:
成功返回0,否则返回错误码。

pthread_exit: 结束线程

函数原型:

void pthread_exit(void retval);

retval 是 void 类型的指针,可以指向任何类型的数据,它指向的数据将作为线程退出时的返回值。如果线程不需要返回任何数据,将 retval 参数置为 NULL 即可。

注意,retval 指针不能指向函数内部的局部数据(比如局部变量)。换句话说,pthread_exit() 函数不能返回一个指向局部数据的指针,否则很可能使程序运行结果出错甚至崩溃

函数作用:
线程通过调用pthread_exit函数终止执行,就如同进程在结束时调用exit函数一样。这个函数的作用是,终止调用它的线程并返回一个指向某个对象的指针。

-------------------------锁-------------------------- pthread_mutex_init:初始化互斥锁

函数原型:

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

函数作用:
该函数用于C函数的多线程编程中,互斥锁的初始化。

pthread_mutex_init() 函数是以动态方式创建互斥锁的,参数attr指定了新建互斥锁的属性。如果参数attr为空(NULL),则使用默认的互斥锁属性,默认属性为快速互斥锁 。互斥锁的属性在创建锁的时候指定,在LinuxThreads实现中仅有一个锁类型属性,不同的锁类型在试图对一个已经被锁定的互斥锁加锁时表现不同。
pthread_mutexattr_init() 函数成功完成之后会返回零,其他任何返回值都表示出现了错误。

函数成功执行后,互斥锁被初始化为未锁住态。

pthread_mutex_lock:上锁

函数原型:

int pthread_mutex_lock(pthread_mutex_t *mutex);

函数作用:
线程调用该函数让互斥锁上锁,如果该互斥锁已被另一个线程锁定和拥有,则调用该线程将阻塞,直到该互斥锁变为可用为止。

返回值:
在成功完成之后会返回零。其他任何返回值都表示出现了错误。

pthread_mutex_trylock:上锁

函数原型:

int pthread_mutex_trylock(pthread_mutex_t *mutex);

函数作用:
线程调用该函数让互斥锁上锁,如果该互斥锁已被另一个线程锁定和拥有,则直接返回。

返回值:
在成功完成之后会返回零。其他任何返回值都表示出现了错误。

pthread_mutex_unlock:解锁

函数原型:

int pthread_mutex_unlock(pthread_mutex_t *mutex);

函数作用:
解除锁定 mutex 所指向的互斥锁的函数

返回值:
在成功完成之后会返回零。其他任何返回值都表示出现了错误。

pthread_mutex_destroy:销毁锁

函数原型:

int pthread_mutex_deslock(pthread_mutex_t *mutex);

函数作用:
销毁mutex所指向的互斥锁

返回值:
在成功完成之后会返回零。其他任何返回值都表示出现了错误。

------------------------信号量--------------------------- pthread_cond_init :初始化条件变量

函数原型:

int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);

描述
The pthread_cond_init() 函数使用由attr指定的属性来创建一个条件变量,若attr为NULL,则属性取默认值。

返回值:函数成功返回0;任何其他返回值都表示错误

pthread_cond_wait:条件等待

函数原型:

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)

参数: cond 条件变量 mutex 互斥锁

第一个参数cond是指向一个条件变量的指针。第二个参数mutex则是对相关的互斥锁的指针

函数作用:
用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它 pthread_cond_wait() 必须与pthread_mutex配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread_cond_signal()或pthread_cond_broadcast,把该线程唤醒,使pthread_cond_wait()通过(返回)时,该线程又自动获得该mutex。

pthread_cond_timedwait:计时等待

函数原型:

int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)

函数作用:
跟pthread_cond_wait类似,都是等待信号量唤醒;不同的是,计时等待pthread_cond_timedwait需要在给定时刻abstime内收到信号量;如果在给定时刻前条件没有满足,则返回ETIMEDOUT,结束等待。

pthread_cond_broadcast:解除条件变量的等待

函数原型

int pthread_cond_broadcast( pthread_cond_t *cond)

函数作用:
该函数用来对所有等待参数cond所指定的条件变量的线程解除阻塞。

返回值:
调用成功返回0,否则返回错误代码

pthread_cond_signal:使等待的线程脱离阻塞状态

函数原型

int pthread_cond_signal( pthread_cond_t *cond)

函数作用:
该函数用来解除一个等待参数cond所指定的条件变量的线程的阻塞状态。当有多个线程挂起等待该条件变量,也只能唤醒一个线程。

pthread_cond_destroy:销毁条件变量

函数原型

int pthread_cond_destroy( pthread_cond_t *cond)

函数作用:
该函数用来释放一个条件变量。释放为条件变量cond所分配的资源。

返回值:
调动成功返回值为0,否则返回错误代码。

-------------------------key-------------------------- pthread_key_create

函数原型:

int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));

函数作用:
分配用于标识进程中线程特定数据的键。
该函数创建一个键值,该键值映射到一个专有数据结构体上。如果第二个参数不是NULL,这个键值被删除时将调用这个函数指针来释放数据空间。

pthread_key_delete

函数原型:

int pthread_key_delete(pthread_key_t *key);

函数作用:
注销一个TSD,这个函数并不检查当前是否有线程正使用该TSD,也不会调用清理函数(destr_function),而只是将TSD释放以供下一次调用pthread_key_create()使用。

返回值:
调动成功返回值为0,否则返回错误代码。

pthread_setspecific

函数原型:

int pthread_setspecific(pthread_key_t key, const void *value);

函数作用:
使用pthread_setspecific可以为指定线程特定数据键设置线程特定绑定

返回值:
调动成功返回值为0,否则返回错误代码。

pthread_getspecific

函数原型:

void *pthread_getspecific(pthread_key_t key);

函数作用:
使用pthread_getspecific获取调用线程的键绑定,并将该绑定存储在value指向的位置中

返回值:
调动成功返回值为0,否则返回错误代码。

--------------------------------------------------- pthread_once

函数原型:

int pthread_once(pthread_once_t *once_control, void (*init_routine) (void));

函数作用:
本函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号