进程间同步的方式有哪些?

临界区

通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。

优点:保证在某一时刻只有一个线程能访问数据的简便办法。

缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可
用来同步多个进程中的线程。

互斥量

为协调共同对一个共享资源的单独访问而设计的。互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。

优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,
而且可以在不同应用程序的线程之间实现对资源的安全共享。

缺点:

  • 互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需 要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速 度上的优势并能够减少资源占用量。
  • 通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过 互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数 据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能 同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求, 信号量对象可以说是一种资源计数器。

 

信号量

为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同 一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号 量的一种特殊情况,当信号量的最大资源数=1 就是互斥量了。

优点:适用于对 Socket(套接字)程序中线程的同步。

缺点:

  • 信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;
  • 信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;
  • 核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。

事件

用来通知线程有一些事件已发生,从而启动后继任务的开始。

优点: 事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进
程中的线程同步操作。

回复

我来回复
  • 暂无回复内容

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部