加减互斥
#include#include 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 %dn",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 %dn",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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)