1. 程式人生 > >solaris 下多執行緒程式設計

solaris 下多執行緒程式設計

2007-08-10

本文遵循CPL協議,可以免費自由使用,但不得去掉作者資訊。 作者: 周海漢 Email:ablozhou at gmail.com 日期:2007.8.9

本文根據作者PPT講稿整理。

參考資源:

程序概念 正在執行的一道程式 是擁有獨立資源的可執行的基本單位 多工系統 併發執行

執行緒的概念 計算機程式中可執行的最小單位 60年代提出 80年代實現產品 輕量級程序

Solaris 執行緒庫 POSIX 執行緒庫,叫pthread 特定於Solaris 的執行緒庫

POSIX POSIX:Portable Operating System Interface IEEE Std 1003.1 1996 版(又稱作ISO/IEC 9945–1第二版)。 IEEE Std 1003.1:2001(又稱作ISO/IEC 9945:2002和單一UNIX 規範版本3)

使用者級執行緒狀態 執行緒ID 暫存器狀態 棧 訊號掩碼 優先順序 執行緒專用儲存

執行緒間同步 互斥量 mutual exclustion lock 條件變數 condition variable 讀寫鎖 read-write lock 計數訊號量 counting semaphore

第一個多執行緒程式 標頭檔案: #include #include 執行緒函式:

extern “C” void* start_routine(void* arg) { printf(“thread %d running…n”,(int)arg); return NULL; } int main() { pthread_t tid1; int arg = 1; int ret; ret = pthread_create(&tid1,NULL,start_routine,(void*)&arg); return ret; } 編譯執行 $ CC –o thread1 –g thread1.cpp $ ./thread1 thread 1 running…

預設執行緒 程序範圍 非分離 預設棧和預設棧大小 零優先順序

pthread_create 語法 int pthread_create( pthread_t tid, const pthread_attr_t *tattr, void(*start_routine)(void *), void *arg );

等待執行緒終止 pthread_join() pthread_join 語法 int pthread_join ( thread_t tid, void **status );

生成兩個執行緒 int main() { pthread_attr_t tattr; void* status=NULL; pthread_t tid1,tid2; int arg = 1; int ret; ret = pthread_create(&tid1,NULL,start_routine,(void*)&arg); pthread_join(tid1,&status);

ret = pthread_attr_init(&tattr); arg=2; ret = pthread_create(&tid2,&tattr,start_routine,(void*)&arg); pthread_join(tid2,&status); return ret; }

結束執行緒 從執行緒函式返回 呼叫pthread_exit(),提供退出狀態 使用POSIX 取消函式執行終止操作

POSIX 通用物件模型 圖 初始化屬性 pthread_attr_init 語法 int pthread_attr_init(pthread_attr_t *tattr);

預設屬性值

屬性 結果
_scope _ PTHREAD_SCOPE_PROCESS 新執行緒與程序中的其他執行緒發生競
_detachstate_ PTHREAD_CREATE_JOINABLE 執行緒退出後,保留完成狀態和執行緒_ID_。
_stacksize_ 0
_priority_ 0
_stackaddr_ NULL 新執行緒具有系統分配的棧地址
_inheritsched_ PTHREAD_EXPLICIT_SCHED 新執行緒不繼承父執行緒排程優先順序
_schedpolicy_ SCHED_OTHER

如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源