[cpp] #include <stdio.h>
#include <pthread.h>
void thread(void) {
int i;
printf("This is a thread.\n");
pthread_exit(NULL);
}
int main(void) {
pthread_t id;
int ret;
ret = pthread_create(&id, NULL, (void *)thread, NULL);
if(ret != 0) {
printf("Create pthread error!\n");
exit(1);
}
int i;
printf("This is the main process.\n");
pthread_join(id, NULL);
return 0;
}
#include <stdio.h>
#include <pthread.h>
void thread(void) {
int i;
printf("This is a thread.\n");
pthread_exit(NULL);
}
int main(void) {
pthread_t id;
int ret;
ret = pthread_create(&id, NULL, (void *)thread, NULL);
if(ret != 0) {
printf("Create pthread error!\n");
exit(1);
}
int i;
printf("This is the main process.\n");
pthread_join(id, NULL);
return 0;
}
函數說明:
int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
此函數接受四個參數,分別為指向線程標識符的指針、線程屬性、線程運行函數的起始地址、運行函數的參數。第二個和第四個參數暫時都為NULL,以後也許會修改。
若此函數執行成功,則返回0,否則返回錯誤編號。
pthread_t用於聲明線程id。
int pthread_join(pthread_t thread, void **retval);
此函數以阻塞的方式等待thread指定的線程結束。當函數返回時,被等待線程的資源被收回。如果進程已經結束,那麼該函數會立即返回。在這裡的意思是主函數在等待線程都結束後才退出,如果不加這個函數的話,主函數執行完自己的代碼程序就終止了,不在乎線程是否也執行結束。
第一個參數為線程ID,標識唯一線程。第二個參數為用戶定義的指針,用來存儲被等待線程的返回值。
若此函數執行成功,則返回0。否則返回錯誤編號。
注:編譯時要加上-lpthread,如果允許使用gdb調試的話,還要加上-g
gcc -o homework1 homework1.c -lpthread