#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 线程原型
// 返回:若成功返回0,否则返回错误编号
void *func1(void *arg)
{
printf("t1:%ld thread creat\n",(unsigned long)pthread_self());//线程编号,pthread_self默认返回的是pthread_t类型
printf("t1:param is %d\n",*((int *)arg));
}
int main()
{
int ret;
int param = 100;
pthread_t t1;//线程ID
ret = pthread_create(&t1,NULL,func1,(void *)¶m);
//线程ID,属性,启动线程调用的函数,需要传的参数
if(ret == 0){
printf("main:creat t1 success!\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
pthread_join(t1,NULL);//线程等待,不然主线程运行完后退出,新的线程没有运行的内存空间,则运行不下去,等新线程退出(pthread_exit)后,再接着运行下面的代码
return 0;
}
编译程序:gcc 函数名.c -pthread
#include <stdio.h>
#include <pthread.h>
// int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
// void pthread_exit(void *retval);
// int pthread_join(pthread_t thread, void **retval);
void *func1(void *arg)
{
static int ret = 10;//static 使函数调用结束后 ret 值还在
printf("t1:%ld thread creat\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int *)arg));
pthread_exit((void *)&ret);//退出新线程
}
int main()
{
int ret;
int param = 100;
pthread_t t1;
int *pret;
ret = pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret == 0){
printf("main:creat t1 success!\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
pthread_join(t1,(void **)&pret);
printf("main:t1 quit:%d\n",*pret);
return 0;
}
#include <stdio.h>
#include <pthread.h>
// int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
// void pthread_exit(void *retval);
// int pthread_join(pthread_t thread, void **retval);
void *func1(void *arg)
{
static char *p = "t1 is run out";
printf("t1:%ld thread creat\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int *)arg));
pthread_exit((void *)p);
}
int main()
{
int ret;
int param = 100;
pthread_t t1;
char *pret = NULL;
ret = pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret == 0){
printf("main:creat t1 success!\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
pthread_join(t1,(void **)&pret);
printf("main:t1 quit:%s\n",pret);
return 0;
}