pthread執行緒
阿新 • • 發佈:2021-11-03
linux多執行緒
1. 標頭檔案
- <pthread.h>
2. 編譯
- gcc -o test test.c -lpthread
3. 變數
- pthread_t
- pthread_cond_t
- pthread_mutex_t
4. 函式
- pthread_create
- pthread_join
- pthread_exit
- pthread_mutex_lock
- pthread_mutex_unlock
- pthread_cond_signal
- pthread_cond_broadcast
- pthread_cond_wait
- pthread_cond_timewait
4.1 pthread_create
int pthread_create(pthread_t *pid, const pthread_attr_t * attr, void*(*func)(void),void*arg)
# 建立新執行緒
# pid:執行緒id
# attr:執行緒屬性,一般為空
# func:執行緒函式
# arg:執行緒函式引數
# 返回值:0,成功
4.2 pthread_join
int pthread_join(pthread_t pid, void**retval)
# 回收執行緒資源,父執行緒阻塞
# pid,執行緒id
# retval,執行緒返回值
# 返回值:0,成功
4.3 pthread_exit
void pthread_exit(void *val)
# 終止執行緒
# val,執行緒返回值
5. 測試程式碼
/* file:pthread_test.c * gcc -o pthread_test pthread_test.c -lpthread */ #include <stdio.h> #include <pthread.h> #define log(fmt,...) printf("%s:%d:"fmt"\n",__func__,__LINE__,##__VA_ARGS__) pthread_cond_t cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t cond_mutex = PTHREAD_MUTEX_INITIALIZER; void *thread_test1(void *arg) { pthread_mutex_lock(&cond_mutex); pthread_cond_wait(&cond,&cond_mutex); pthread_mutex_unlock(&cond_mutex); log("%s",(char*)arg); return NULL; } void *thread_test2(void *arg) { pthread_mutex_lock(&cond_mutex); pthread_cond_signal(&cond); log("%s",(char*)arg); pthread_mutex_unlock(&cond_mutex); pthread_exit("exit pthread"); return NULL; } int main() { char *buf1="test thread1"; char *buf2="test thread2"; void *buf; pthread_t thread[2]; pthread_create(&thread[0], NULL, thread_test1, (void *)buf1); pthread_create(&thread[1], NULL, thread_test2, (void *)buf2); pthread_join(thread[0],NULL); pthread_join(thread[1],&buf); log("%s",(char *)buf); return 0; }