【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中文网
浙公网安备 33010602011771号