1. 函数声明:
int pthread_create(pthread_t *pid, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
- pid:线程创建成功后返回的线程标示
- attr:线程属性结构,用于控制创建线程参数,后续介绍
- start_routine:线程函数地址
- arg: 传递给线程函数的参数
返回值:success:0, failed:errno
2. 创建线程---不传参数:
#include <stdio.h> #include <pthread.h> #include <unistd.h> void *pth_fun(void *arg) { printf("Hi, I am a pthread!\n"); return 0; } int main(void) { pthread_t pth; int rs = pthread_create(&pth, NULL, pth_fun, NULL); if(rs) { printf("pthread create error, reason = %d\n", rs); return -1; } sleep(1); printf("main will be end!\n"); return 0; }
3. 创建线程---传递结构体参数:
#include <stdio.h> #include <pthread.h> #include <unistd.h> #include <string.h> struct mystruct { int age; char name[100]; }; void *pth_fun(void *arg) { printf("Hi, I am a pthread!\n"); struct mystruct *mydata; mydata = (struct mystruct*)arg; printf("name = %s, age = %d\n", mydata->name, mydata->age); return 0; } int main(void) { pthread_t pth; struct mystruct zhangsan; memset(&zhangsan, 0, sizeof(zhangsan)); zhangsan.age = 26; memcpy(zhangsan.name, "zhangsan", strlen("zhangsan")); int rs = pthread_create(&pth, NULL, pth_fun, &zhangsan); if(rs) { printf("pthread create error, reason = %d\n", rs); return -1; } sleep(2); printf("main will be end!\n"); return 0; }
运行结果:
kunmzhao@build-245:~/study$ gcc temp.c -o temp -lpthread
kunmzhao@build-245:~/study$ ./temp
Hi, I am a pthread!
name = zhangsan, age = 26
main will be end!
kunmzhao@build-245:~/study$
4. 创建线程---共享进程数据
#include <stdio.h> #include <pthread.h> #include <unistd.h> #include <string.h> int g_num = 100; void *pth_fun(void *arg) { printf("Hi, I am a pthread!\n"); g_num++; return 0; } int main(void) { printf("g_num = %d\n", g_num); pthread_t pth; int rs = pthread_create(&pth, NULL, pth_fun, NULL); if(rs) { printf("pthread create error, reason = %d\n", rs); return -1; } sleep(2); printf("main will be end!\n"); printf("g_num = %d\n", g_num); return 0; }
运行结果:
kunmzhao@build-245:~/study$ gcc temp.c -o temp -lpthread
kunmzhao@build-245:~/study$ ./temp
g_num = 100
Hi, I am a pthread!
main will be end!
g_num = 101
kunmzhao@build-245:~/study$
浙公网安备 33010602011771号