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 的...