#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;
}