千家信息网

Linux多线程函数解析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Linux多线程函数解析",在日常操作中,相信很多人在Linux多线程函数解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux多线程函数解析"
千家信息网最后更新 2026年11月03日Linux多线程函数解析

这篇文章主要介绍"Linux多线程函数解析",在日常操作中,相信很多人在Linux多线程函数解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux多线程函数解析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Linux 多线程函数解析

Linux多线程函数用得比较多的是下面的3个
pthread_create(),pthread_exit(),pthread_join(); 它们都是在头文件之中。编译时需要加静态库-lpthread

下面是函数的说明:pthread_create是UNIX环境创建线程函数
int pthread_create(
pthread_t *restrict tidp,
const pthread_attr_t *restrict_attr,
void*(*start_rtn)(void*),
void *restrict arg);

返回值
  若成功则返回0,否则返回出错编号
  返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于制定各种不同的线程属性。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。
  linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。
  由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由 restrict 修饰的指针表达式中。 由 restrict 修饰的指针主要用于函数形参,或指向由 malloc() 分配的内存空间。restrict 数据类型不改变程序的语义。 编译器能通过作出 restrict 修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程。
参数
  第一个参数为指向线程标识符的指针。
  第二个参数用来设置线程属性。
  第三个参数是线程运行函数的起始地址。
  最后一个参数是运行函数的参数。
另外,在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库

pthread_exit(void* retval);
线程通过调用pthread_exit函数终止自身执行,就如同进程在结束时调用exit函数一样。这个函数的作用是,终止调用它的线程并返回一个指向某个对象的指针。该指针可以通过pthread_join(pthread_t tpid, void **value_ptr)中的第二个参数value_ptr获取到。

函数pthread_join用来等待一个线程的结束。函数原型为:
  extern int pthread_join __P (pthread_t __th, void **__thread_return);
第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程退出时的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。如果执行成功,将返回0,如果失败则返回一个错误号。
所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。

下面是一个简单的例子,子线程thread_fun会打出5次"this is thread_fun print!"然后调用pthread_exit退出,并返回一个指向字符串"this is thread return value!"的指针。在主函数里面调用pthread_join等待thread_fun线程结束,然后读取子线程的返回值到value中,再打印出来。
输出结果是:
pthread_create ok!
this is thread_fun print!
this is thread_fun print!
this is thread_fun print!
this is thread_fun print!
this is thread_fun print!
pthread exit value: this is thread return value!

01.#include
02.#include
03.#include
04.#include
05.#include
06.#include
07.//////////////////////////////////////////////////////
08.void *thread_fun(void *arg) {
09. int i=0;
10. char *value_ptr = "this is thread return value!\n";
11. for (i=0; i<5; i++) {
12. printf("this is thread_fun print!\n");
13. sleep(1);
14. }
15. pthread_exit((void*)value_ptr);
16.}
17.//////////////////////////////////////////////////////
18.int main(int argc, char **argv) {
19. pthread_t pid;
20. int ret;
21. void* value;
22.
23. ret = pthread_create(&pid, NULL, thread_fun, NULL);
24. if (ret) {
25. printf("pthread_create failed!\nerrno:%d\n", errno);
26. return -1;
27. }
28. printf("pthread_create ok!\n");
29.
30. pthread_join(pid, &value);
31. printf("pthread exit value: %s\n", value);
32. return 0;
33.}
34.

到此,关于"Linux多线程函数解析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

线程 函数 参数 指针 指向 对象 存取 学习 成功 地址 方法 类型 编译 运行 内存 属性 更多 标识 标识符 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 中智农互联网科技 江苏根荣互联网科技 中国互联网科技工作委员会毛军 互联网下的科技发展 互联网中国科技 互联网科技媒体 汇久创客互联网科技 易通互联网络科技有限公司 科技互联网公司logo 移动互联网年度科技创新 互联网科技研发水平 中国科技创新与世界互联网大会 浙南科技城互联网大厦建设工程 产业互联网科技服务公司 互联网科技包装股份有限公司上市 济南小医互联网科技有限公司招聘 上海同邻互联网科技有限公司规模 科技互联网行业投资研究 颐高云石互联网科技 精品咖啡豆 美国互联网保险保险科技 一五八零互联网科技 新兴科技互联网创新大赛颁奖典礼 如何创新互联网科技 工业互联网展湾科技股份有限公司 深圳互联网科技的发展 互联网营销推广黑科技 唐山双旺合互联网科技产业园 山东蛋芒互联网科技有限公司
0