直接进行代码演示:
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
pthread_mutex_t mutex;
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));
pthread_mutex_lock(&mutex);
while(1){
printf("t1:%d\n",g_data++);
sleep(1);
if(g_data==3){
pthread_mutex_unlock(&mutex);
printf("t1 quit=======================\n");
// pthread_exit(NULL);//退出t1线程
exit(0);//退出整个c程序进程
}
}
}
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);
pthread_mutex_lock(&mutex);
g_data++;
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main()
{
int ret;
int param=100;
pthread_t t1;
pthread_t t2;
pthread_mutex_init(&mutex,NULL);
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);
pthread_mutex_destroy(&mutex);
return 0;
}
编译;gcc demo6.c -lpthread
运行结果:当运行到g_data=3时退出整个进程
main:create t1 success
main:create t2 success
main 139710919681792
main:0
t1:139710911395584 thread is create
t1:param is 100
t1:0
t2:139710903002880 thread is create
t2:param is 100
t2:1
t1:1
main:2
main:2
t1:2
main:3
t1 quit=======================
编写脚本进行测试:
vi test.sh
./a.out
./a.out
./a.out
chmod +x test.sh:将test.sh文件改为可执行状态
./test.sh:运行
运行结果:将以上结果运行3次
vi test.c
int main()
{
int i;
for(i=0;i<100;i++){
system("./a.out");
}
return 0;
}
编译:gcc test.c -o test:生成test可执行文件
运行:./test
测试结果:
以上测试结果循环100遍
*注:ctrl+c杀不了test程序,ctrl+c杀的是a.out代码运行的程序;需要重新ALT+CTRL+T重新开个窗口→ps -aux|grep test找到test进程pid号→kill -9 pid:杀掉测试程序从而阻止循环