Linux高階程式設計 08 執行緒概述

2022-07-08 18:42:20 字數 1380 閱讀 2142

和訊號處理函式的控制在處理完訊號之後就結束不同的是,多執行緒的控制流程可以長期並存,作業系統會在各執行緒之間排程和切換,就像在多個程序之間排程和切換一樣,但建立執行緒開銷要比程序小得多。因此,執行緒往往也被稱作輕量級的程序。

我們一般用到的是由posix標準定義的執行緒庫函式,稱為posix thread或者pthread。在linux上線程函式位於libpthread共享庫中,因此在編譯時要加上-lpthread選項。

在posix庫中,建立執行緒是通過函式實現的,它的宣告如下:

#include int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
它有四個引數,

建立成功時,返回0,失敗是返回錯誤碼。這個和其它的系統函式失敗返回-1,由errno返回錯誤碼不大一樣。

有的時候,我們需要等待執行緒結束,此時才能繼續執行後面的事情。拿前面的例子來說,如果不等待執行緒結束,則主線程(main函式)會直接往下執行導致程式退出,執行緒函式都無法得到執行。

pthread庫中等待執行緒結束的函式是pthread_join,它的宣告如下:

#include int pthread_join(pthread_t thread, void **retval);
它有兩個引數,

終止執行緒的方法一般來說有如下幾種:

其中,方法1和方法2都是通過結束執行緒函式來實現主動退出的,它們是比較常用的方法。方法3則是一種強制終止的做法,這個方法乙個問題就是導致物件的析構函式可能無法執行,會出現資源洩漏,並不推薦用這種方法。

#include #include #include #include #include void* thr_fn(void *arg)

int main(void)

; int err = pthread_create(&ntid, null, thr_fn, (void*)"new thread: ");

if (err != 0)

void *tret;

pthread_join(ntid, &tret);

printf("thread exited\n");

return 0;

}

編譯程式

gcc thread.c  -o thread -lpthread
執行結果

new thread:  pid 21231 tid 1082132800 (0x40800940)

thread exited

來自為知筆記(wiz)

Shell指令碼 程式設計高階08

1 編寫函式實現兩個數字做為引數,返回最大值maxnum bin bash functions read p please input first digits num1 read p please input second digits num2 max maxnum num1 num2 if m...

Linux 執行緒 1 執行緒概述

程式是應用程式作為乙個靜態檔案儲存在計算機系統的硬碟等儲存空間中,而程序則是處於動態條件下由作業系統維護的系統資源管理實體,也就是程式的動態執行過程。執行緒按照排程者可分為使用者級執行緒和核心級執行緒。使用者級執行緒 主要解決上下文切換問題,它的排程演算法和排程過程全部由使用者自行決定,執行不需要核...

Linux高階環境程式設計 執行緒的建立

pthread create函式用於建立乙個執行緒 函式原型 include intpthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict ...