不可不知的程序“锁”(附加锁源码)

什么是“锁” ?


        通俗点讲,当你去食堂打饭,人很多的时候,大家都想尽快打到饭,要是大家一拥而上的叫阿姨打饭的话,阿姨也不知道听谁的。这个时候就需要有某种机制约束一下大家的行为。相对于多线程访问某个共享资源的时候,“锁”就应运而生。“多线程”——一群人,“共享资源”——饭菜。
        所以,锁就是这个样子。

 

锁的作用是什么 ?


         锁的作用就是维护秩序,让大家有序的去访问资源,而不会因为同时访问产生冲突。

 

锁的分类 ?


  1. 从线程是否需要对资源加锁可以分为 悲观锁 和 乐观锁
  2. 从资源已被锁定,线程是否阻塞可以分为 自旋锁
  3. 从多个线程并发访问资源,也就是 Synchronized 可以分为 无锁偏向锁、 轻量级锁 和 重量级锁
  4. 从锁的公平性进行区分,可以分为公平锁 和 非公平锁
  5. 从根据锁是否重复获取可以分为 可重入锁 和 不可重入锁
  6. 从那个多个线程能否获取同一把锁分为 共享锁 和 排他锁

    以上的这个分类不知道是怎么分的,个人认为用的最多的就是互斥锁和文件锁。后面对这两种锁说明。


什么情况下需要加锁?


        跟上厕所一样,人多的时候你得排队,厕所的锁就是这个“锁”,只让当前这个人使用。当这个用完了,把门打开了,这个动作就行“释放锁”一样。让下一个继续使用。

 

怎样加锁?


            使用最多的是互斥锁和文件锁、互斥锁常用于共享资源,文件锁适用于读写文件。
 

常用锁的函数:


Windows:

InitializeCriticalSection() :初始化

EnterCriticalSection()     :获取锁

LeaveCirticalSection()    :释放锁

DeleteCriticalSection()    :删除锁

Linux:

pthread_mutex_init()       :初始化  

pthread_mutex_lock()     :获取锁

pthread_mutex_unlock() :释放锁

pthread_mutex_destroy():删除锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值