定义一个全局变量,所有线程都对这个变量进行操作:
#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int g_data=0;
void *func1(void *arg)
{
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int*)arg));
while(1){
printf("t1:%d\n",g_data++);
sleep(1);
//if(g_data==3){
// pthread_exit(NULL);
//}
}
}
void *func2(void *arg)
{
printf("t2:%ld thread is create\n",(unsigned long)pthread_self());
printf("t2:param is %d\n",*((int*)arg));
while(1){
printf("t2:%d\n",g_data++);
sleep(1);
}
}
int main()
{
int ret;
int param=100;
pthread_t t1;
pthread_t t2;
ret=pthread_create(&t1,NULL,func1,(void*)¶m);
if(ret==0){
printf("main:create t1 success\n");
}
ret=pthread_create(&t2,NULL,func2,(void*)¶m);
if(ret==0){
printf("main:create t2 success\n");
}
printf("main %ld \n",(unsigned long)pthread_self());
while(1){
printf("main:%d\n",g_data++);
sleep(1);
}
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
编译运行结果:
main:create t1 success
main:create t2 success
main 139811819345664
main:0
t1:139811811059456 thread is create
t1:param is 100
t1:1
t2:139811802666752 thread is create
t2:param is 100
t2:2
main:3
t1:4
t2:5
t1:6
main:7
t2:6
t2:8
main:9
t1:10
t1:11
main:12
t2:13
main:14
t2:15
t1:16
main:17
t1:18
t2:19
t1:20
main:21
t2:22
在上一个线程操作后依次加1
修改代码:
#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int g_data=0;
void *func1(void *arg)
{
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:param is %d\n",*((int*)arg));
while(1){
printf("t1:%d\n",g_data++);
sleep(1);
if(g_data==3){
pthread_exit(NULL);
}
}
}
void *func2(void *arg)
{
printf("t2:%ld thread is create\n",(unsigned long)pthread_self());
printf("t2:param is %d\n",*((int*)arg));
while(1){
printf("t2:%d\n",g_data++);
sleep(1);
}
}
int main()
{
int ret;
int param=100;
pthread_t t1;
pthread_t t2;
ret=pthread_create(&t1,NULL,func1,(void*)¶m);
if(ret==0){
printf("main:create t1 success\n");
}
ret=pthread_create(&t2,NULL,func2,(void*)¶m);
if(ret==0){
printf("main:create t2 success\n");
}
printf("main %ld \n",(unsigned long)pthread_self());
while(1){
printf("main:%d\n",g_data++);
sleep(1);
}
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
编译运行结果:
有的时候能捕获到全局变量==3,退出线程t1;有的时候捕获不到,t1无法退出。