• 同步 互斥锁 读写锁 区别


    转发:https://blog.csdn.net/u012884354/article/details/46691761

    相交进程之间的关系主要有两种,同步与互斥。所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。所谓同步,是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。
      显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。
      也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!
      总结:互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
      同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

      1.  
        读写锁特点:
      2.  
        1)多个读者可以同时进行读
      3.  
        2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
      4.  
        3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
      5.  
         
      6.  
        互斥锁特点:
      7.  
        一次只能一个线程拥有互斥锁,其他线程只有等待
      8.  
         
      9.  
        互斥锁
      10.  
        pthread_mutex_init()
      11.  
        pthread_mutex_lock()
      12.  
        pthread_mutex_unlock()
      13.  
        读写锁
      14.  
         
      15.  
        pthread_rwlock_init()
      16.  
        pthread_rwlock_rdlock()
      17.  
        pthread_rwlock_wrlock()
      18.  
        pthread_rwlock_unlock()
      19.  
        条件变量
      20.  
         
      21.  
        pthread_cond_init()
      22.  
        pthread_cond_wait()
      23.  
        pthread_cond_signal()
  • 相关阅读:
    ffmpeg h264编码 extradata 为空
    MySQL主从复制报错一致性问题解决
    MySQL 子查询优化案例
    RAC+单节点搭建DG
    总结搭建Oracle11g DG踩的坑
    解决开机自动调用脚本失败的问题
    MySQL版本升级之5.6到5.7
    MySQL 通过semi join 优化子查询
    MySQL 配置文件中忘配置default-character-set引发的乱码问题
    MySQL5.6下使用xtrabackup部分备份恢复到MySQL5.7
  • 原文地址:https://www.cnblogs.com/mybatis/p/9389220.html
Copyright © 2020-2023  润新知