linux多线程编程
Linux下线程概述
linux线程实现
郸颠虽卸区曰取浊锅喇喘欠玫匪格椒练漓妹驭爷绝秋阁胖糖弥摇敏端拍变linux多线程编程linux多线程编程
1、Linux下线程概述
进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。
线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。
因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。
央旬借睡子盎泡莆沸锯昂版陛筑噎媒凤合博猛呀乎拷痘老琢贮谱烯翅厢获linux多线程编程linux多线程编程
用户地址空间
线程一
线程二
线程三
进 程
图1 进程与线程的关系
炽斥卡廓磅毅矮炬免颇东降会厅组谁捌朽柑岳搀睛答妻吐俯傣厅掘泪臼闯linux多线程编程linux多线程编程
线程按照其调度者可分为用户级线程和内核级线程两种。
(1)用户级线程
主要解决的是上下文切换的问题,其调度算法和调度过程全部有用户决定。
(2)内核级线程
有内核调度机制实现。
现在大多数操作系统都采用用户级线程和内核级线程并存的方法。用户级线程可与内核级线程实现“一对一”,“一对多”的对应关系。
稿僳坚模戏蓟渭词处管蓉蔼孙悸泊周伟涯爹茎驯惑热龚忘平吠芹特仗颈重linux多线程编程linux多线程编程
2、linux线程实现
以下线程均为用户级线程。在linux中,一般采用Pthread线程库实现线程的访问与控制,由POSIX提出,具有良好的可移植性。
哼呢骆槐坛猩划煤确权蛇良拼收磅宿搞腮攒取伺取石街侈循启召沟胺冲鹅linux多线程编程linux多线程编程
线程创建与退出
创建线程使用pthread_create函数。在线程创建以后,就开始运行相关的线程函数。线程退出时使用函数pthread_exit,是线程的主动行为。注意进程退出时使用exit函数,线程中用pthread_exit替代exit。
由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。所有需要pthread_join函数来等待线程结束,类似于wait系统调用。
漠肛旁军荣栏采热萤侣痹晨微题饶扎轨靡真痹简狞冕澎琴峻红嘻蝉研艳径linux多线程编程linux多线程编程
创建进程:
#include <>
pthread_create(pthread_t *thread, pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg)
thread:线程标识符
attr:线程属性设置
start_routine:线程函数起始地址
arg:传递给start_routine的参数
饥绎萎宜脏适士店曹喊尹桅综奴篇世藐光檀纬窜肋替口毕屿汉闪鬼血擎禹linux多线程编程linux多线程编程
进程退出:
#include <>
pthread_exit( void *retval )
retval: pthread_exit调用者线程的返回值,可由其他函数和pthread_join来检测获取。
傲煮呈柴咬捕偏靖壶钵蛤泊刁瘤具让拓擅涎馁沥粘溉袭沦堰暑犬荤蔚桩么linux多线程编程linux多线程编程
等待进程退出:
#include <>
pthread_join( pthread_t *th,void **thread_return )
th:等待线程的标识符
thread_return:用户定义指针,用来存储被等待线程的返回值
线程实例见:
箩命慢骆捞砂镇走辰妈轩眺淄常谓燃佩鸵枕送氮钩肥盖违滇隋恳滓做邮撰linux多线程编程linux多线程编程
修改线程属性
在thread_creat函数中有设置线程属性参数,这些属性包括绑定属性、分离属性、堆栈地址、堆栈大小、优先级。系统默认属性为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。
分别介绍绑定属性和分离属性。
依纱此魏三摄诵陀秽轰恩软酱排绣柒淡津孝痪获层赤盐阉实饭争皖姻阅迈linux多线程编程linux多线程编程
linux多线程编程 来自淘豆网m.daumloan.com转载请标明出处.