Linux多线程基本API

进程 VS 线程

在这里插入图片描述

POSIX线程库

与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”开头,要使用这些函数库,要通过引入头文<pthread.h>,而且链接这些线程函数库时要使用编译器命令的“-lpthread”选项[Ubuntu系列系统需要添加的是”-pthread”选项而不是”-lpthread”]

1.pthread_create

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

创建一个新的线程

参数

thread:线程ID

attr:设置线程的属性,一般设置为NULL表示使用默认属性

start_routine:是个函数地址,线程启动后要执行的函数

arg:传给线程启动函数的参数

返回值:成功返回0;失败返回错误码;

错误检查

UNIX传统的函数:成功返回0,失败返回-1,并且对设置全局变量errno以指定错误类型。然而pthreads函数出错时不会设置全局变量errno(而其他的大部分POSIX函数会设置errno)。而是将错误代码通过返回值返回;

pthreads同样也提供了线程内的errno变量,对于每一个线程, 都有一个errno的值, 以支持其它使用errno的代码。对于pthreads函数的错误,建议通过返回值进行判定,因为读取返回值要比读取线程内的errno变量的开销更小!

2.pthread_exit

void pthread_exit(void *value_ptr);

线程终止

value_ptr:指向该线程的返回值;注意:value_ptr不能指向一个局部变量。

3.pthread_join

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

等待线程结束

value_ptr:它指向一个指针,后者指向线程的返回值(用户获取线程的返回值)

在线程中同样存在僵尸线程,子线程退出,主线程没有pthread_join等待。将线程设置为脱离状态可以避免僵尸线程

4.pthread_self

pthread_t pthread_self(void);

返回线程ID

5.pthread_cancel

取消一个执行中的线程,由其他线程执行,属于线程的它杀

    int pthread_cancel(pthread_t  thread);

参数:
thread: 线程ID
返回值: 成功返回0, 失败返回错误码

6. pthread_detach 函数

将一个线程分离,避免僵尸线程

    int  pthread_detach(pthread_t thread);

参数:
thread: 线程ID

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

参考

https://blog.csdn.net/Alatebloomer/article/details/81939991

发布了156 篇原创文章 · 获赞 47 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_38769551/article/details/105208163