Linux執行緒介紹及函式操作

2021-09-24 22:23:02 字數 3034 閱讀 7024

執行緒共享資源:

乙個程序中的多個執行緒共享以下資源:

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