執行緒共享資源:
乙個程序中的多個執行緒共享以下資源:
1.可執行的指令
2.靜態資料
3.程序中開啟的檔案描述符
4.當前工作目錄
5.使用者id
6.使用者組id
linux執行緒庫:
·pthread執行緒庫中提供以下操作
建立執行緒 **執行緒 結束執行緒
·同步和互斥機制
訊號量 互斥鎖
使用執行緒庫編譯時
gcc -o test test.c -lpthread
執行緒建立——pthread_create:
#include
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*routine)(void*),void *arg);
成功時返回0,失敗返回錯誤碼
thread執行緒物件
attr執行緒屬性,null代表預設屬性
routine執行緒執行的函式
arg傳遞給routine的引數,不需要傳參就null
執行緒**——pthread_join
#include
int pthread_join(pthread_t thread,void **retval);
成功時返回0,失敗返回錯誤碼
thread要**的執行緒物件
呼叫執行緒阻塞直到thread結束
*retval接收執行緒thread的返回值
執行緒結束——pthread_exit
#include
void pthread_exit(void *retval);
結束當前執行緒
retval可被其他執行緒通過pthread_join獲取
執行緒私有資源被釋放
示例:
#include #include #include #include #include char message[32] = "hello world";
void *thread_func(void *arg);
int main(int argc, char const *ar**)
pthread_join(a_thread,&result);
printf("message is %s\n", message);
return 0;
}void *thread_func(void *arg)
訊號量:
訊號量代表某一類資源,其值表示系統中該資源的數量
訊號量是乙個受保護的變數,只能通過三種操作來訪問
1.初始化
2.p操作(申請資源)
3.v操作(釋放資源)
posix中定義了兩類訊號量
無名訊號量 有名訊號量
訊號量初始化:
#include int sem_init(sem_t *sem,int pshared,unsigned int val);
成功時返回0.失敗返回eof
sem指向要初始化的訊號量
pashared:0 執行緒間 1 程序間
val 訊號量初始值 0:沒有資源 大於0 有資源
p / v操作:
#include
int sem_wait(sem_t *sem); p操作
int sem_post(sem_t *sem); v操作
成功返回0,失敗返回eof
sem指向要操作的訊號量物件
互斥:·臨界資源:
一次只允許乙個任務(程序,執行緒)訪問的共享資源
·臨界區:
訪問臨界區的**
·互斥機制:
mutex互斥鎖
訪問臨界資源前申請鎖,訪問完後釋放鎖
互斥鎖初始化:
#include
int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr);
成功返回0,失敗返回錯誤碼
mutex指向要初始化的互斥鎖物件
attr 互斥鎖屬性,null表述預設屬性
申請鎖:
#include int pthread_mutex_lock(pthread_mutex_t *mutex);
成功返回0,失敗返回錯誤碼
mutex指向要初始化的互斥鎖物件
如果無法獲得鎖,任務阻塞
釋放鎖:
#include int pthread_mutex_unlock(pthread_mutex_t *mutex);
成功返回0,失敗返回錯誤碼
mutex 指向要初始化的互斥鎖物件
執行完臨界區要及時釋放鎖 示例:
互斥鎖_lock_巨集定義
編譯時:
gcc -o test test.c -d_lock_
//-d 表示加入巨集定義
#include #include #include #include unsigned int count,value1,value2;
pthread_mutex_t lock;
void *function(void *arg);
int main(int argc, char const *ar**)
if (pthread_create(&a_thread,null,function,null) != 0)
while(1)
return 0;
}void *function(void *arg)
#ifdef _lock_
pthread_mutex_unlock(&lock);
#endif
}return null;
}
Linux 執行緒操作函式總結
1 執行緒建立函式int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict arg 返回值 若是成功建立執行緒返回0,否則返回錯誤的編...
Linux 執行緒操作函式總結
1 執行緒建立函式 int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict arg 返回值 若是成功建立執行緒返回0,否則返回錯誤的...
linux執行緒相關函式及使用
apt get install manpages posix devpthread create函式 函式原型 int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg...