加减互斥
#include<pthread.h>
#include<stdio.h>
int num; //临界资源
pthread_mutex_t mutex; //创建互斥锁
void* addfunc(){
int i=0;
for(;i<50;i++){
pthread_mutex_lock(&mutex);
int tmp = num;
tmp++;
usleep(10); //模拟内存写入较慢,被其他线程抢占内存
num = tmp;
printf("i'm add,add val is %d\n",num);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
void* subfunc(){
int j=0;
for(;j<50;j++){
pthread_mutex_lock(&mutex);
int tmp = num;
tmp--;
num = tmp;
printf("i'm sub,sub val is %d\n",num);
usleep(5);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main(){
pthread_t add_thread,sub_thread; //声明两个线程ID
pthread_mutex_init(&mutex,NULL);//互斥锁初始化
pthread_create(&add_thread, NULL, addfunc, NULL);//创建线程
pthread_create(&sub_thread, NULL, subfunc, NULL);
pthread_join(add_thread, NULL);//等待线程结束并回收资源
pthread_join(sub_thread, NULL);
pthread_mutex_destroy(&mutex);//销毁互斥锁
return 0;
}