linux应用开发->互斥锁的使用

线程同步 : 当一个线程在对某个临界资源进行操作时,其他线程都不可以对这个资源进行操作,直到该线程完成操作,其他线程才能操作,也就是协调步调,让线程按预定的先后次序进行运行.线程同步的方法有四种:互斥锁,信号量,条件变量,读写锁

  1 #include <pthread.h>
  2 #include <errno.h>
  3 #include <stdio.h>
  4 #include <unistd.h>
  5 #include <stdlib.h>
  6 #include <pthread.h>
  7 
  8 /*
  9  *互斥锁使用方法:
 10  *(0)pthread_mutex_t mutex;
 11  *(1)锁初始化:pthread_mutex_init(&mutex,NULL);
 12  *(2)加锁:pthread_mutex_lock(&mutex);
 13  *(3)解锁:pthread_mutex_unlock(&mutex);
 14  *(4)销毁锁:pthread_mutex_destroy(&mutex);
 15  */
 16 
 17 pthread_mutex_t mutex;
 18 int num=0;
 19 
 20 void *thread_function(void *arg);
 21 int main(void)
 22 {
 23         pthread_t pthread[5];
 24         int ret;
 25         int i=0;
 26         pthread_mutex_init(&mutex,NULL);
 27         for(;i<5;i++){    //创建五个线程,且五个线程都修改num变量
 28                 ret=pthread_create(&pthread[i],NULL,thread_function,NULL);              //创建线程,线程开始执行
 29                 if(ret !=0){
 30                         perror("pthread_creat error");
 31                         exit(1);
 32                 }
 33         }
 34 
 35         char * pthread_ret;
 36         i=0;
 37         for(;i<5;i++){
 38                 pthread_join(pthread[i],(void **)&pthread_ret); //等待线程结束
 39                 printf("join:thread%d return:%s\n",i,pthread_ret);
 40         }
 41         pthread_mutex_destroy(&mutex);
 42         return 0;
 43 }
 44 void *thread_function(void *arg)
 45 {
 46         printf("Thread begins running\n");
 47         int i=0;
 48         for(;i<1000;i++){
 49                 pthread_mutex_lock(&mutex);     //加锁
 50                 num++;          //多线程访问同一变量,必须保证原子化操作
 51                 printf("num=%d\n",num);
 52                 pthread_mutex_unlock(&mutex);   //解锁
 53         }
 54         pthread_exit("thread over");
 55 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪爪鸡啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值