pthread_mutex_init

#include
#include

#include
#include
#include
struct ShareInt
{
int x;
pthread_mutex_t lock;
};
void *Thread1Entry(void *pv);
void *Thread2Entry(void *pv);
int main(int argc,char *argv[])
{
pthread_t tid1;
pthread_t tid2;
struct ShareInt st = {0};
int ret = 0;
//int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
pthread_mutex_init(&st.lock,NULL);//如果参数attr为空,则使用默认的互斥锁属性,默认属性为快速互斥锁

ret = pthread_create(&tid1,NULL,Thread1Entry,(void *)&st);
ret += pthread_create(&tid2,NULL,Thread2Entry,(void *)&st);
if(ret < 0)
{
	printf("pthread_create failed\n");
	return 1;
}

pthread_join(tid1,NULL);
pthread_join(tid2,NULL);

pthread_mutex_destroy(&st.lock);//销毁锁
return 0;

}

void *Thread1Entry(void *pv)
{
struct ShareInt *pst = (struct ShareInt *)pv;
int v = 0;

while(1)
{
	pthread_mutex_lock(&pst->lock);
	v = pst->x;
	if(v > 3)
	{
		pst->x++;
		printf("I am working in thread1\n");
	}
	pthread_mutex_unlock(&pst->lock);
	if(v <= 3)
	{
		sleep(1);
	}
	if(v > 10)
	{
		break;
	}
}
return (void *)0;

}

void *Thread2Entry(void *pv)
{
struct ShareInt *pst = (struct ShareInt *)pv;
int v = 0;

while(1)
{
	pthread_mutex_lock(&pst->lock);
	v = pst->x;
	pst->x++;
	printf("I am working in thread2\n");
	pthread_mutex_unlock(&pst->lock);
	sleep(1);
	if(v > 10)
	{
		break;
	}
}

return (void *)0;

}

你可能感兴趣的:(pthread_mutex_init)