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結構的指標,指向的結構決...