Linux執行緒API的實際操作筆記

2021-07-26 12:29:14 字數 4269 閱讀 9801

第一節:執行緒的建立

(1)要包含標頭檔案 #include

(2)宣告用來存放執行緒id的變數    pthread_t   ptid;

(3)設計執行緒處理函式 格式為 type * (funcname)(type * argv);

(4)建立執行緒-->使用函式pthread_create(&ptid,null(使用預設執行緒屬性), (void *) &funcname,(void *)argv ) 成功返回0

(5)編譯時要連線線程庫    -lpthread

第二節:執行緒的退出

(1)建立執行緒---》步驟如第一節

ps:

#include #include /*執行緒退出函式

pthread_exit(0)

pthread_join(pthread_t pid,void **infor)//等待執行緒退出

pthread_exit(0)的退出碼是0, pthread_join()接收到的退出碼也是0,它被存放在*info中

乙個執行緒不能被多個執行緒等待,乙個執行緒可以等待多個執行緒

*/void *thread(void *argv)

int main()

pthread_join(pid,(void *)&a);

//pthread_join(pid,&b);

printf("a=%s\n",(char *)a);

//printf("b=%d\n",b);

}

第三節:執行緒的取消

(1)建立兩個執行緒-->> 建立步驟如第一節

(2)設定執行緒的取消屬性

ps:

#include

#include

#define dis1

#define ***1

/*取消執行緒函式

pthread_cancel(pthread_t pid);

*/void *thread(void *argv)

}void *thread1(void *argv)

}int main()

if(pthread_create(&pid1,null,thread1,null)!=0)

sleep(6);

pthread_cancel(pid);

pthread_cancel(pid1);

//因為沒有分離執行緒屬性所以取消執行緒後要使用pthread_join()函式來**資源

printf("%d\n",pthread_join(pid,null));

printf("%d\n",pthread_join(pid1,null));

return 0;

}第四節:執行緒同步---->互斥鎖

(1)建立三個執行緒---->>建立步驟如第一節所示

(2)宣告乙個鎖 pthread_mutex_t mutex;

(3)初始化鎖 pthread_mutex_init(&mutex,null)

(4)加鎖pthread_mutex_lock(&mutex)

(5)解鎖pthread_mutex_unlock(&mutex)

(6)銷毀鎖 pthread_mutex_destroy(&mutex)

#include

#include

#define pin()   printf("%s:%s():len:%d:is error\n",__file__,__function__,__line__)

/*互斥鎖(用於同步執行緒,保護公共資源)

登出:int pthread_mutex_destroy(pthread_mutex_t *mutex);

第一種初始化鎖:int pthread_mutex_init(pthread_mutex_t *restrict mutex,

const pthread_mutexattr_t *restrict attr(鎖的屬性));

第二種初始化鎖: pthread_mutex_t mutex = pthread_mutex_initializer;

pthread_mutex_lock(pthread_mutex_t *mutex),//加鎖

pthread_mutex_try‐lock(pthread_mutex_t *mutex),//測試加鎖,

pthread_mutex_unlock(pthread_mutex_t *mutex),//解鎖

枷鎖之後不解鎖會造成死鎖(災難性的後果)

*/pthread_mutex_t mutex;

int global=0;

void *thread1(void *agrc)

void *thread2(void *agrc)

void *thread3(void *agrc)

int main()

if(0!=pthread_create(&p2,null,thread2,null))

if(0!=pthread_create(&p3,null,thread3,null))

pthread_join(p1,null);

pthread_join(p2,null);

pthread_join(p3,null);

pthread_mutex_destroy(&mutex);

return 0;

}第五節:解決死鎖問題

(1)建立執行緒---->建立步驟如第一節所示

(2)建立互斥鎖--->建立步驟如第四節所示

(3)使用解決死鎖問題的處理函式

phtread_cleanup_push(void (*name)(void *argv),(void *)argv)

pthread_cleanup_pop(0(一般都為0));

ps#include

#include

#define pin()   printf("%s:%s():len:%d:is error\n",__file__,__function__,__line__)

#define unt   (unsigned int )

/**解決死鎖問題

void pthread_cleanup_push(void (*routine)(void *),

void *arg);

void pthread_cleanup_pop(int execute);

互斥鎖(用於同步執行緒,保護公共資源)

登出:int pthread_mutex_destroy(pthread_mutex_t *mutex);

第一種初始化鎖:int pthread_mutex_init(pthread_mutex_t *restrict mutex,

const pthread_mutexattr_t *restrict attr(鎖的屬性));

第二種初始化鎖: pthread_mutex_t mutex = pthread_mutex_initializer;

pthread_mutex_lock(pthread_mutex_t *mutex),//加鎖

pthread_mutex_try‐lock(pthread_mutex_t *mutex),//測試加鎖,

pthread_mutex_unlock(pthread_mutex_t *mutex),//解鎖

枷鎖之後不解鎖會造成死鎖(災難性的後果)

*/pthread_mutex_t mutex;

int global=0;

void unlock_mutex(void *argv)

void *thread1(void *argv)

}void *thread2(void *argv)

void *thread3(void *argv)

int main()

if(pthread_create(&p2,null,(void *)thread2,null)!=0)

if(pthread_create(&p3,null,(void *)thread3,null)!=0)

sleep(2);

printf("global=%d\n",global);

//pthread_cancel(p1);

pthread_cancel(p2);

pthread_cancel(p3);

pthread_join(p1,null);

pthread_join(p2,null);

pthread_join(p3,null);

pthread_mutex_destroy(&mutex);

return 0;

}

13 執行緒池的實際操作

執行緒池一般就是這麼用的 public static void main string args try catch interruptedexception executionexception e 也就是說 submit 乙個任務,然後用 future 物件來非同步獲取結果 幾個類和介面的繼承關...

EOS實際操作

ref sudo apt get install clang 4.0 lldb 4.0 libclang 4.0 dev cmake make libbz2 dev libssl dev libg dev autotools dev build essential libbz2 dev libicu...

cvtColor 實際操作

cvtcolor 函式用於實現影象的色彩空間轉換,一般包括四個引數,cvtcolor src,dst,type,channels 即源影象,目標影象,轉換方式,目標影象通道數,有時候在應用時會選擇將dst設定和src相同,即實現原圖的轉換,需要注意在這個過程中,並不是在src的資料矩陣中直接進行修改...