1. 程式人生 > >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中的也都是一致的。