线程概念等等
示例1:创建一个简单的线程
pThdemo1.c
#include <stdio.h>
#include <pthread.h>
void *func1(void *arg)
{
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int *)arg));
}
int main()
{
// int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int ret;
int param = 100;
pthread_t t1;
ret = pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret == 0){
printf("main:create t1 success\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
// while(1);
// pthread_join();
return 0;
}
运行结果为: 有while(1)情况下
没有的情况下 会直接main线程完了 新线程跳过了
示例二:改进示例 线程用 join 和exit
pThj_edemo2.c
#include <stdio.h>
#include <pthread.h>
void *func1(void *arg)
{
static int ret = 10;
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int *)arg));
pthread_exit((void *)&ret);
}
int main()
{
// int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int ret;
int param = 100;
pthread_t t1;
int *pret = NULL;
ret = pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret == 0){
printf("main:create t1 success\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
// while(1);
pthread_join(t1,(void **)&pret);
printf("main : t1 quit:%d\n",*pret);
return 0;
}
运行结果为: 对整型数值
示例三: 改进示例 数字换成字符
pThj_e_strdemo3.c
#include <stdio.h>
#include <pthread.h>
void *func1(void *arg)
{
static int ret = 10;
static char *p = "t1 is run out";
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int *)arg));
pthread_exit((void *)p);
}
int main()
{
// int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int ret;
int param = 100;
pthread_t t1;
char *pret = NULL;
ret = pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret == 0){
printf("main:create t1 success\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
// while(1);
pthread_join(t1,(void **)&pret);
printf("main : t1 quit:%s\n",pret);
return 0;
}
运行结果为: 返回字符串