【Linux操作系统原理】进程间通信和线程间同步

1、 进程间通信

进程通信方式有下面几种

1.1 管道

 

1.2 消息队列

 

1.3 共享内存

 

1.4 信号量(同步)

 

1.5 信号

 

1.6 套接字

 

2、 线程间同步

2.1 互斥锁(互斥)

 

2.2 自旋锁

 

2.3 信号量(互斥 + 同步)

  信号量是一种计数器,用于保护共享资源的访问。当进程要访问共享资源时,必须先获取信号量。如果信号量的值为0,则进程将被阻塞,直到其他进程释放信号量。在多进程环境下,信号量通常用于控制并发访问共享资源的数量。信号量是一种比较底层的同步机制,因为它只提供了原子操作,不能直接表示特定的语义。

 

2.4 条件变量(互斥(配合互斥锁)+ 同步)

  条件变量是一种线程同步机制,用于在一个或多个线程等待另一个线程满足某个条件时进行同步。条件变量通常与互斥锁配合使用,以实现对共享资源的访问控制。当一个线程发现共享资源不满足某个条件时,它可以通过调用pthread_cond_wait函数阻塞自己,并释放相应的互斥锁。当另一个线程修改了共享资源,并调用pthread_cond_signal或pthread_cond_broadcast函数时,阻塞的线程将被唤醒,并重新获取互斥锁,继续执行。条件变量是一种比较高层次的同步机制,因为它提供了比信号量更多的语义。 

  综上所述,信号量适用于多进程环境下的同步问题,而条件变量适用于多线程环境下的同步问题。在实际使用时,需要根据具体的场景选择合适的同步机制。如果需要在多进程之间共享资源,或者需要控制多个进程之间的访问顺序,可以选择信号量。如果只需要在多线程之间共享资源,或者需要实现线程间的通信和协作,可以选择条件变量。

 

2.5 读写锁

 

2.6 屏障

 

 

 

参考博文:进程间通信的6种方式 - 敲什么敲 - 博客园 (cnblogs.com)

 

linux实现线程同步有几种方式-linux运维-PHP中文网

 

posted on 2024-06-25 10:21  lingzshen  阅读(33)  评论(0)    收藏  举报