头文件:#include <pthread.h>
在编译时注意加上-lpthread参数,以调用动态链接库。因为pthread并非Linux系统的默认库。
1.线程创建
函数声明
int pthread_create(pthread_t * thread, const pthread_arrt_t* attr,void*(*start_routine)(void *), void* arg);
-thread:指向线程标识符的指针
-attr:线程的属性。给传递NULL表示设置为默认线程属性
-start_routine:线程执行实体入口
arg:运行函数的参数
-返回值:成功返回0,失败返回错误码
-typedef unsigned long int pthread_t
线程id的类型是pthread_t,它只在当前进程中保证是唯一的,在不同的系统中pthread_t这个类型有不同的实现,调用pthread_self()可以获得当前线程的id.
代码演示:
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
void* thread_start(void* arg){
int arg_data = *((int*)arg);
for (int i = 0; i < 10; i++){
//这里要注意一下
//当创建一个线程之后,该线程和主线程一起执行,若主线程提前退出了,thread_start这个线程还没有来得及打印也会因为主线程退出而退出了
for (int j = 0; j < 5000000; j++);
printf("Receive arg %d=%d\n", arg_data, arg_data);
}
}
int main(void){
pthread_t tid ;
int arg1 = 1;
int arg2 = 2;
//创建线程
int ret = pthread_create(&tid, NULL, thread_start, (void*)&arg1);