pthread_mutex_init

#include <pthread.h>
#include <unistd.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值