linux執行緒相關小結

2021-07-04 15:59:50 字數 1797 閱讀 7054

typedef unsigned long int pthread_t;

int pthread_create(pthread_t *thread, pthread_attr_t *attr, void*(func)(void*), void *arg);

attr為null時使用預設屬性。

執行緒的退出方式:

1.執行完成後隱式退出;

2.由執行緒本身顯式呼叫pthread_exit函式退出;

pthread_exit(void *retval);

3.被其他執行緒呼叫pthread_cancel(pthread_t thread);

如果乙個執行緒要等待另乙個執行緒的終止,可以使用pthread_join函式:

pthread_join(pthread_t thread, void **threadreturn);

linux下的c語言程式設計有多種執行緒同步機制,最典型的是條件變數(condition variable)。pthread_cond_init用來建立乙個條件變數,其函式原型為:

int pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr);

int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);

pthread_cond_wait()使用時的一般方式是:

pthread_mutex_lock(&var.mutex);

while 條件為假

pthread_cond_wait(&var.cond, &var.mutex);

修改條件

pthread_mutex_unlock(&var.mutex);

即,pthread_cond_wait一般與互斥鎖結對使用。pthread_cond_wait()先解鎖以便鎖能被其他執行緒使用,再阻塞,返回時再上鎖。

int pthread_cond_timewait(pthread_cond_t *cptr, pthread_mutex_t *mptr, const

struct timespec * abstime);

pthread_cond_timewait()允許執行緒就阻塞時間設定乙個限制值。其中,

struct timespec

;int pthread_cond_broadcast(pthread_cond_t *cptr);

int pthread_cond_signal(pthread_cond_t *cptr);

通常pthread_cond_signal只喚醒等待在相應條件變數上的乙個執行緒,而pthread_cond_broadcast()則喚醒阻塞在相應條件變數上的所有執行緒。

互斥鎖上鎖和解鎖:

int pthread_mutex_lock(pthread_mutex_t *mptr);

int pthread_mutex_trylock(pthread_mutex_t *mptr);

int pthread_mutex_unlock(pthread_mutex_t *mptr);

如果嘗試給乙個已由另外某個執行緒鎖住的互斥鎖上鎖,那麼pthread_mutex_lock將阻塞到該互斥鎖解鎖為止。而pthread_mutex_trylock()則為對應的非阻塞函式,如果該互斥鎖已經上鎖,則返回ebusy錯誤。

如果互斥鎖是靜態分配的,則可以使用pthread_mutex_initializer初始化。如果是動態分配的(如malloc()),則可以使用pthread_mutex_init()函式初始化。

執行緒相關部分知識點小結

一 callable和runnable的區別 1 callable規定的方法時call,runnable規定的方法時run,其中實現runnable介面的類需要通過thread類包裝後,在進行啟動 而callable一般交由executeservice來執行 2 callable執行任務後可返回值,...

Linux執行緒常見屬性小結

我們知道現代作業系統一般都支援多執行緒,執行緒是作業系統排程的基本單位,程序是作業系統分派資源的基本單位,所以對執行緒屬性的掌握也十分重要,首先讓我們來看看pthread attr t這個結構體 執行緒屬性結構如下 typedef struct pthread attr t 預設情況下新建乙個執行緒...

Linux 網路效能測試相關小結

1 iftop使用 介面上面顯示的是類似刻度尺的刻度範圍,為顯示流量圖形的長條作標尺用的。中間的 這兩個左右箭頭,表示的是流量的方向。tx 傳送流量 rx 接收流量 total 總流量 cumm 執行iftop到目前時間的總流量 peak 流量峰值 rates 分別表示過去 2s 10s 40s 的...