函数原型:
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
4个参数:第一个参数:指向线程标示符pthread_t的指针;
第二个参数:设置线程的属性
第三个参数:线程运行函数的起始地址
第四个参数:运行函数的参数
pthreadTest.c
通过pthread_self()获取当前线程的ID
#include<stdio.h>
#include<pthread.h>
void *print_pthread_id(void *arg)
{
printf("current thread id is %u\n",(unsigned)pthread_self());
}
int main(int argc, char * argv[])
{
pthread_t thread;
pthread_create(&thread,NULL,print_pthread_id,NULL);
sleep(1);
printf("main thread id is %u\n",(unsigned)pthread_self());
return 0;
}
编译时必须加-lpthread,
运行结果:
current thread id is 2279393024
main thread id is 2287691520
pthreadTest1.c
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
pthread_t t_id;
void printf_tid_pid(const char *s)
{
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u (0x%x)\n",s,(unsigned)pid,(unsigned)tid,(unsigned)tid);
}
void *thread_fuction(void *arg)
{
printf_tid_pid("new thread: ");
return ((void*)0);
}
int main(int argc,int argv)
{
int err;
err = pthread_create(&t_id,NULL,thread_fuction,NULL);
if(err != 0 )
{
printf("create thread fail: %s\n",strerror(err));
}
printf_tid_pid("main thread");
sleep(1);
return 0;
}
gcc -o pthreadTest1 pthreadTest1.c -lpthread
./pthreadTest1
main thread pid 10437 tid 3091662592 (0xb8470700)
new thread: pid 10437 tid 3083364096 (0xb7c86700)