linux多執行緒

2021-06-26 23:10:06 字數 1048 閱讀 5811

linux下為了多執行緒同步,通常用到鎖的概念。

posix下抽象了乙個鎖型別的結構:ptread_mutex_t。通過對該結構的操作,來判斷資源是否可以訪問。顧名思義,加鎖(lock)後,別人就無法開啟,只有當鎖沒有關閉(unlock)的時候才能訪問資源。

它主要用如下5個函式進行操作。

1:pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutexattr_t *attr);

初始化鎖變數mutex。attr為鎖屬性,null值為預設屬性。

2:pthread_mutex_lock(pthread_mutex_t *mutex);加鎖

3:pthread_mutex_tylock(pthread_mutex_t *mutex);加鎖,但是與2不一樣的是當鎖已經在使用的時候,返回為ebusy,而不是掛起等待。

4:pthread_mutex_unlock(pthread_mutex_t *mutex);釋放鎖

5:pthread_mutex_destroy(pthread_mutex_t *mutex);使用完後釋放

下面經典例子為建立兩個執行緒對sum從1加到100。前面第乙個執行緒從1-49,後面從50-100。主線程讀取最後的加值。為了防止資源競爭,用了pthread_mutex_t 鎖操作。

#include#include#include#includetypedef struct ct_sum

ct_sum;

void * add1(void * cnt)

pthread_mutex_unlock(&(((ct_sum*)cnt)->lock));

pthread_exit(null);

return 0;

}void * add2(void *cnt)

pthread_mutex_unlock(&(((ct_sum*)cnt)->lock));

pthread_exit(null);

return 0;

}int main(void)

linux多執行緒

執行緒標識 就像每個程序都有乙個id一樣,執行緒也有自己的id。程序id用pid t來表示,他是乙個unsigned int。程序id用pthread t來表示,pthread t不能把它當整數處理。程序可以通過pthread self 函式獲得自身的執行緒id。執行緒建立 在程序中只有乙個控制線程...

Linux多執行緒

一 執行緒的特點 1.執行緒是程序的乙個執行流,是cpu排程和分配的基本單位。執行緒是程式執行的最小單位。2.執行緒不會影響到其它執行緒的執行。比如乙個執行緒崩潰,其它執行緒正常執行。3.同一程序內的執行緒共享程序的位址空間。二 乙個執行緒的組成 1.乙個指向當前被執行指令的指令指標 2.乙個棧空間...

linux多執行緒

原型 int pthread create pthread t thread,const pthread attr t attr,功能 建立新的執行緒,成功返回0,失敗返回錯誤編號 引數 thread 用來儲存新建立的執行緒id attr 乙個指向pthread attr t結構的指標,指向的結構決...