solaris 下多執行緒程式設計
本文遵循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
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協議,轉載請註明來源