ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

四种线程间同步的方法及两种进程间同步的方法

2022-05-16 22:00:08  阅读:167  来源: 互联网

标签:同步 互斥 线程 自旋 进程 接字 方法


 

 

线程间同步之互斥量:

即线程A访问邻接资源时,阻止线程B访问。互斥量(互斥锁)保证两个线程指令的先后顺序执行。具有原子性(一系列操作不可以被中断,不存在部分执行部分未执行的情况)。互斥锁是最简单的线程同步方法,有加锁和解锁两种状态,

两个状态可以保证资源访问的串行。 同时,操作系统直接提供了互斥量的API,开发者可以直接使用API完成资源的加锁、解锁操作。   线程间同步之自旋锁: 自旋锁的原理和互斥锁相同。使用自旋锁的线程会反复检查锁变量是否可用,自旋锁不会让出CPU,而是处于忙等待状态(一直死循环等待CPU释放) 优点:自旋锁避免了进程或者上下文切换的开销,同时操作系统本身很多地方都使用了自旋锁。 但是自旋锁不适合单核CPU。 自旋锁和互斥锁有什么区别呢? 比如线程1调用线程2占有的临界资源(线程2持有自旋锁)那么线程1会一直请求直到临界资源释放,而互斥锁会让线程1休眠,置入请求队列中去。   线程间同步之读写锁 在实际生产中,临界资源往往面临的情况是多读少些,即读时并不改变临界资源的值。 读写锁是一种特殊的自旋锁 允许多个读者同时访问资源以提高读性能 对于写操作则是互斥的,即读-写互斥,写-写互斥,而对于读-读操作,不互斥。读写锁对于多读少写的场景性能提升非常大。   线程间同步之条件变量 条件变量是一种相对复杂的线程同步方法 条件变量允许线程睡眠,直到满足某种条件 当满足条件时,可以向该线程信号,通知唤醒,往往配合互斥锁使用。  

 

 

使用fork系统调用创建进程。

fork系统调用是用于创建进程的 fork创建的进程初始化状态与父进程一样 系统会为fork的进程分配新的资源   fork函数没有入参,会返回两次,分别返回子进程id和0,返回子进程id的是父进程,返回0的是子进程。     进程间同步之共享内存 在某种程度上,多进程是共同使用物理内存的 由于操作系统的进程管理,进程间的内存空间是独立的。并且进程默认是不能访问进程空间之外的内存空间的。 共享存储允许不相关的进程访问同一片物理内存 共享内存是两个进程之间共享和传递数据最快的方式 共享内存未提供同步机制(避免了并发问题),因此需要借助其他机制管理访问  

 

 使用共享内存的四个步骤

 

 

 

unix之域内套接字(socket) 域套接字是一种高级的进程间通信的方法 Unix域套接字可以用于同一机器进程间通信 Unix系统提供的域套接字提供了网络套接字类似的功能    举个例子:  

 

 

 server端创建,绑定,监听套接字,接受并处理消息,而client端创建,连接套接字并发送消息。

 

套接字提供了单机简单可靠的进程通信同步服务,但是缺点也很明显,只能在单机使用,不能跨机器使用。

标签:同步,互斥,线程,自旋,进程,接字,方法
来源: https://www.cnblogs.com/buttertofree/p/16278731.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有