示例代码:
demo6.c
#include<stdio.h>
#include<pthread.h>
int g_data = 0;
pthread_mutex_t mutex;//创建全局锁
void *func1(void* arg)
{
printf("t1:%ld pthread is create\n",(unsigned long)pthread_self());//获取id
printf("t1: param is %d\n",*((int* )arg));//取内容
pthread_mutex_lock(&mutex);//加锁
while(1)
{
printf("t1: g_data = %d\n",g_data++);
sleep(2);
if(g_data == 3){
printf("t1 = %d\n",g_data);
pthread_mutex_unlock(&mutex);//解锁
printf("t1 quit ================================\n");
//pthread_exit(NULL);
exit(0);
}
}
}
void *func2(void* arg)
{
printf("t2:%ld pthread is create\n",(unsigned long)pthread_self());//获取id
printf("t2: param is %d\n",*((int* )arg));//取内容
while(1)
{
printf("t2: g_data = %d\n",g_data);
pthread_mutex_lock(&mutex);//加锁
g_data++;
pthread_mutex_unlock(&mutex);//解锁
sleep(2);
}
}
int main()
{
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// 返回:若成功返回0,否则返回错误编号
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: g_data = %d\n",g_data);
sleep(2);
}
pthread_join(t1,NULL);//等待
pthread_join(t2,NULL);
pthread_mutex_destroy(&mutex);//销毁锁
return 0;
}
编译:gcc demo6.c -lpthread -o pthread
运行结果:
测试脚本代码:
text.sh
./a.out
./a.out
./a.out
加权限:chmod +x text.sh
运行: ./text.sh
运行结果:
测试代码:
text.c
int main()
{
int i = 0;
for(i = 0;i < 100; ++i)
{
system("./pthread");
}
}
编译: gcc text.c
运行:./a.out
运行结果: