Linux线程相关函数

创建线程

#include <pthread.h>
			
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
				void *(*start_routine) (void *), void *arg);
				
pthread_t *thread-------传递一个pthread_t变量地址进来, 用于保存新线程的tid(线程ID)

const pthread_attr_t *attr----线程属性设置, 如使用默认属性则传NULL

viod *(*start_routine) (void *)----函数指针, 指向新线程应该加载执行的函数模块

void *arg----------------------指定线程将要加载调用的那个函数的参数

返回值 : 成功返回0, 失败返回错误号, 以前学过的系统函数都是成功返回0, 失败返回-1
Compile and link with -lpthread			链接这个库
typedef unsigned long int pthread_t\

获取调用线程tid

#include <pthread.h>

pthread_t pthread_self(void);

Compile and link with -pthread.

退出当前线程

#include <pthread.h>

void pthread_exit(void *retval);

void *retval----线程退出时传递出的参数, 可以是退出值或地址, 若是地址时, 
不能使线程内部申请的局部地址调用线程退出函数

注意和exit函数的区别, 任何线程里的exit导致进程退出,其他线程未工
作结束, 主控线程退出时不能return或exit

需要注意, pthread_exit或者return返回的指针所指向的内存单元必须是全局的或者是
用malloc分配的,不能再线程函数的栈上分配, 因为当其他线程得到这个返回指针时线程函数
已经退出了
Compile and link with -pthread.

等待回收线程(阻塞函数)

#include <pthread.h>

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

pthread_t thread---回收线程的tid

void **retval---接受退出线程传递出的返回值

返回值 : 成功返回0, 失败返回错误号

调用该函数的线程将挂起等待, 直到id为thread的线程终止,thread线程以不同的方法终止,通过
pthread_join得到的终止状态是不同的, 总结如下:
		如果thread线程通过return返回, retval所指向的单元里存放的是thread线程函数的返回值
		如果thread线程被别的线程调用pthread_cancel异常终止掉, retval所指向的单元里存放的是
				常数PTHREAD_CANCELED(-1)
		如果thread线程是自己调用pthread_exit终止的e,retval所指向的单元里存放的是传给pthread_exit
				的参数
		如果对thread线程的终止状态不感兴趣, 可以传NULL给retval参数
Compile and link with -pthread.

在进程内某个线程可以取消另一个线程

#include <pthread.h>

int pthread_cancel(pthread_t thread);

Compile and link with -pthread.

设置线程为分离态

#include <pthread.h>

int pthread_detach(pthread_t thread);

pthread_t thread----分离线程tid

返回值: 成功返回0, 失败返回错误号

一般情况下, 线程终止后, 其终止状态一直保留到其他线程调用pthread_join获取它的状态为止,但是线程也可以
被置为detach状态, 这样的线程一旦终止就立刻回收它占用的所有资源, 而不保留终止状态, 不能对一个已经处于
detach状态的线程调用pthread_join,这样的调用将返回EINVAL, 对一个尚未detach的线程调用pthread_join或
pthread_detach都可以把该线程置为detach状态, 也就是说, 不能对同一线程调用两次pthread_join,或者如果已经
对一个线程调用了pthread_detach就不能再调用pthread_join了
Compile and link with -pthread.

比较两个线程是否相等

#include <pthread.h>

int pthread_equal(pthread_t t1, pthread_t t2);

返回值 : 如果相等返回非零值, 否则返回0
Compile and link with -pthread.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值