linux下线程以及pthread库
Posted 禾田守望者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下线程以及pthread库相关的知识,希望对你有一定的参考价值。
一.概述
linux中不区分进程和线程,都认为是个任务,都是创建一个task_struct.如何区分?线程是共享相同地址空间,而进程是独占地址空间.
多线程共享同一进程的地址空间
优点:
通信方便,可以通过全局变量.
缺点:
访问共享数据时需要考虑同步和互斥.
二.线程共享资源:
可执行的指令
静态数据
进程中打开的文件描述符
当前工作目录
用户ID
用户组ID
三.线程私有资源:
线程ID
PC(程序计数器)和相关寄存器:保证不同线程执行不同的代码.
堆栈
错误号
优先级
执行状态和属性
四.Linux线程库:
pthread线程库:(POSIX)
1.创建线程:
2.回收线程(pthread_join):
pthread_join(pthread_t thread, void **retval)
*retval接收线程thread函数对应的返回值,比如return返回的值或者pthread_exit中的retval.(两者是等效的)
3.结束线程(pthread_exit):
结束当前线程,而exit是结束当前的进程.
pthread_exit(void *retval)相当于return retval;可以是各种类型.
retval可被其他线程通过pthread_join获取.
示例:
#include<stdio.h> #include<unistd.h> #include<pthread.h> void * task(void * param) { sleep(5); printf("hello "); //pthread_exit(NULL); //pthread_exit("子线程执行完毕"); //既可以返回NULL,也可以返回字符串. return "子线程执行完毕"; } int main() { //初始化线程 pthread_t tid; void *result; //创建线程 int rc = pthread_create(&tid, NULL, task, NULL); if(rc) { printf("线程创建失败! "); return -1; } pthread_join(tid, &result); printf("创建主线程 "); printf("result is %s ", result); pthread_exit(NULL); //退出,并返回NULL,有个就不需要return 0了. }
以上是关于linux下线程以及pthread库的主要内容,如果未能解决你的问题,请参考以下文章
[Linux用户空间编程-7]:pThread线程库-线程管理代码示例
Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)