调度
由操作系统内核实现(用户空间的线程实现除外),根据不同的调度策略,调度个进程的运行。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中的也都是一致的。