1.什么是互斥量
互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。
2.先创建t1线程,保证让t1先运行,然后再创建t2,运行t2
#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;
pthread_mutex_t mutex;//定义互斥锁
void *func1(void *arg)
{
int i;
pthread_mutex_lock(&mutex);//上锁
for(i=0;i<5;i++)
{
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:params is %d\n",*((int *)arg));
}
pthread_mutex_unlock(&mutex);//解锁
}
void *func2(void *arg)
{
pthread_mutex_lock(&mutex);//上锁
printf("t2:%ld thread is create\n",(unsigned long)pthread_self());
printf("t2:params is %d\n",*(int *)arg);
pthread_mutex_unlock(&mutex);//解锁
}
int main()
{
int ret;
int param=100;
pthread_t t1;//线程1
pthread_t t2;//线程2
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());
pthread_join(t1,NULL);//等待线程
pthread_join(t2,NULL);//等待线程
pthread_mutex_destroy(&mutex);//销毁锁
return 0;
}
运行结果:
——@上官可编程