首页 > 代码库 > posix thread介绍
posix thread介绍
posix thread是操作系统级(OS level)的API规范,主要用来定义线程及线程间同步的相关操作,采用C语言定义。posix规范主要在unix like类系统上实现;Windows类系统采用了自己的线程API。目前很多语言都在其标准库中提供了语言级的线程支持:如Java中的Thread,concurrenty包;python中的threading model;C++11标准中的thread库等。还有很多以第三方库方式提供的各种语言的线程实现,就不一一列举了。
线程环境要素
定义一个完整的线程环境需要一下几个方面:
执行环境 execution context
即线程的表示,生命周期的管理等。
调度 scheduling
决定线程的运行状态。
同步 synchronization
多个线程之间运行时序的控制。
本文介绍下posix thread中对上述几个方面的设计与实现。
执行环境
线程的表示
posix中用pthread_t类型表示一个线程。
生命周期管理 lifecycle
线程创建 creating:
int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg);线程终止 terminating:
void pthread_exit(void *value_ptr);
int pthread_cancel(pthread_t thread);
自然终止
当线程的入口函数(start_routine)返回时,线程自然退出。
等待线程终止
int pthread_join(pthread_t thread, void **value_ptr);线程回收recycling
int pthread_detach(pthread_t thread);
这个函数的使用需要结合线程创建时的属性(attribute)设置。
调度
由操作系统内核实现(用户空间的线程实现除外),根据不同的调度策略,调度个进程的运行。posix创建线程时,可以指定优先级参数,来设定线程的调度状态。
同步
同步涉及两种情况:互斥和协同工作。
互斥mutual exclusion,race condition
用来保证多个线程对共享资源(shared resource)的操作的一致性。posix thread提供的机制:mutex和reader/writer lock
mutex:
pthread_mutex_t表示一个mutex
int pthread_mutex_init ( pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_destroy ( pthread_mutex_t *mutex);
int pthread_mutex_lock (pthread_mutex_t *mutex);
int pthread_mutex_trylock (pthread_mutex_t *mutex);
int pthread_mutex_unlock (pthread_mutex_t *mutex);
reader/writer lock
The read-write lock permits concurrent reads and exclusive writes to a protected resource.
目前很多OS上没有实现 reader/writer lock。r/w的实现可以结合mutext和condition自行实现。
具体可参考:
http://docs.oracle.com/cd/E19455-01/806-5257/6je9h032m/index.html
协同工作 cooperating
不同线程之间根据某个事件,来决定执行。代表的情况有: producer/consumer,3哲学家问题等。posix thread提供的机制:Condition Variables
pthread_cond_t:表示一个条件变量
pthread_cond_init( )
pthread_cond_destroy( )
pthread_cond_broadcast( )
pthread_cond_signal( )
pthread_cond_timedwait( )
pthread_cond_wait( )
posix thread的设计简洁,完备,抽象清晰、合理,是API设计的典范。posix thread提供的机制也比较简单,使用这些机制可以构建复杂的多线程程序。深入理解这些机制本身非常重要(编写正确程序的前提),所有的线程实现中(包括语言级和系统级)的基本概念和posix thread中的也都是一致的。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。