linux系统编程 互斥锁使用

注意:

使用互斥锁在访问共享资源前加锁,访问后立即解锁。锁的“粒度”越小越好(锁里的动作越少越好)

死锁:

  • 线程对同一个互斥锁连续加锁两次
  • 线程a、b各加了一个不同的锁,却不解开,而去试图加锁其他锁
​

 28 #include<stdio.h>
 29 #include<pthread.h>
 30 #include<unistd.h>
 31 #include<stdlib.h>
 32 //定义全局变量:锁
 33 pthread_mutex_t mutex;    
      //pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;(静态初始化)
 34 void *th1(void *)
 35 {
 36         while(1){
 37         //加锁
 38         pthread_mutex_lock(&mutex);
 39         printf("hello \n");
 40         sleep(3);
 41         printf("world\n");
 42         pthread_mutex_unlock(&mutex);
 43         sleep(4);
 44         }
 45 }
 46 void *th2(void *)
 47 {
 48         while(1){
 49         //加锁
 50         pthread_mutex_lock(&mutex);
 51         printf("HELLO \n");
 52         sleep(2);
 53         printf("WORLD\n");
 54         pthread_mutex_unlock(&mutex);
 55         sleep(3);
 56         }
 57 
 58 }
 59 void main(void)
 60 {
 61         //创建两个线程
 62         pthread_t TH1,TH2;
 63         pthread_create(&TH1,NULL,th1,NULL);
 64         pthread_create(&TH2,NULL,th2,NULL);
 65         //初始化互斥锁,动态初始化
 66         pthread_mutex_init(&mutex,NULL);
 67 
 68         while(1);
 69         //回收线程
 70         pthread_join(TH1,NULL);
 71         pthread_join(TH2,NULL);
 72 }


​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值