Pthread线程使用详解

简介: 文中先讲解函数,再运行实例,以及一些注意事项

文中先讲解函数,再运行实例,以及一些注意事项。


一、使用pthread创建一个子线程并传入参数


函数pthread_create,使用man 3 pthread_create查看介绍。


1.1 函数基本用法讲解


1.1.1 pthread_create

#include <pthread.h>
/*在当前进程中创建一个新的线程,新线程的运行会调用start_routine函数,同时传递arg参数给
*start_routine函数
*/
int pthread_create(pthread_t *thread, //新线程句柄
                              const pthread_attr_t *attr,//新线程的属性
                              void *(*start_routine) (void *), //新线程调用的函数
                              void *arg);//传递给新线程的参数

函数描述:

通过pthread_create创建的新线程,有收下四种方法退出线程:

  1. 调用pthread_exit(value),value是退出状态值,该值对同进程中调用了pthread_join()的线程是可见的;
  2. start_routine返回,在该函数中调用return语句
  3. 线程被cancel,参见pthread_cancel()
  4. 任何线程调用了exit方法,或者主线程在main函数中返回,都会导致所有线程的退出。

attr参数是一个pthread_attr_t结构体,它在线程被创建时被用来设定新线程的属性。这个结构体的初始化是通过pthread_attr_init()函数。如果该参数为空,那么新线程会使用默认的属性参数。

pthread_create函数调用返回之前,新线程的内存指针会赋给thread参数,表示线程的ID,这个ID的作用是在后续可以调用针对该线程的其它pthreads函数。

返回值

成功返回0,失败返回一个错误编号,同时thread参数也不会被赋值。

pthread_join

函数描述

#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);

pthread_join函数会等待指定的线程结束,如果指定的线程已经线束,那么它会立即返回。指定的线程必须是joinable的。也就是说,pthread_join()函数会一直阻塞调用线程,直到指定的线程tid终止。当pthread_join()返回之后,应用程序可回收与已终止线程关联的任何数据存储空间,(另外也可设置线程attr属性,当线程结束时直接回收资源)如果没有必要等待特定的线程终止之后才进行其他处理,则应当将该线程分离pthread_detach()

如果retval不为空,那么该函数会拷贝退出状态值到retval指向的内存中,如果目标thread被cancel了,retval的值为PTHREAD_CANCELED

返回值

成功返回0,错误返回错误码

目录
相关文章
|
Linux
Linux系统编程-(pthread)线程通信(读写锁)
**读写锁与互斥锁类似,读写锁比互斥锁有更高的并行性,读写锁特点如下:** ​ 1. 读写锁有三种状态,读模式下加锁(共享)、写模式下加锁(独占)以及不加锁。 ​ 2. 一次只有一个线程可以占有写模式下的读写锁;但是多个线程可以同时占有读模式下的读写锁。 ​ 3. 读写锁在写加锁状态时,其他试图以写状态加锁的线程都会被阻塞。读写锁在读加锁状态时,如果有线程希望以写模式加锁时,必须阻塞,直到所有线程释放锁。 ​ 4. 当读写锁以读模式加锁时,如果有线程试图以写模式对其加锁,那么读写锁会阻塞随后的读模式锁请求,以避免读锁长期占用,而写锁得不到请求。
193 0
|
Linux
Linux系统编程-(pthread)线程的使用案例(分离属性、清理函数等)
这篇文章介绍Linux下线程的创建与基本使用案例,主要是案例代码为主;相关的函数详细介绍在上篇文章里已经介绍过了。
190 0
|
存储 消息中间件 Unix
Linux系统编程-(pthread)线程创建与使用
前面文章介绍了Linux下进程的创建、管理、使用、通信,了解了多进程并发;这篇文章介绍Linux下线程的基本使用。
270 0
|
Java Android开发 开发工具
20.Eclipse下Ndk开发(pthread开启线程调用Java方法)
本项目最终的目的是在pthread线程中,调用Java一个工具类得到多个uuid,然后调用类中另一个方法弹出toast,实现在c中获取安卓上下文对象Context 编译native方法,生成头文件的一系列过程不再赘述,直接上代码,都在注释中 PosixUtils: package com.
1206 0
18.pthread POSIX线程
(创建于 2018/3/1 上午7:11:44) 查看pthread所有方法 man -k pthread 输出结果 pthread_attr_destroy (3) - initialize and destroy thread attribute...
978 0
|
PHP Windows Java
|
调度 C语言
|
1天前
|
监控 安全 Java
【多线程学习】深入探究阻塞队列与生产者消费者模型和线程池常见面试题
【多线程学习】深入探究阻塞队列与生产者消费者模型和线程池常见面试题