首页 > 编程知识 正文

线程间通信的几种方法(进程间通信的方式有哪些)

时间:2023-05-05 22:53:44 阅读:76984 作者:698

进程间通信方式:

进程间通信主要包括管道、系统IPC (包括消息队列、信号、信号、共享存储器等)、套接字套接字套接字。

1 .管道:管道主要包括无名管道和命名管道:管道,可用于有血缘关系的亲子流程之间的通信。 有名管道除了管道具有的功能外,还允许没有血缘关系的过程之间进行通信

1.1普通管道PIPE: 1 )半双工(即数据只沿一个方向流动),读取侧和写入侧固定

2 )只能用于具有亲缘关系的进程之间的通信(也可以是父子进程或兄弟进程之间) )。

3 )可以将其视为特殊文件,其读写也可以使用普通的读、写等函数。 但是,它不属于其他文件系统,而不是普通文件,只存在于内存中。

1.2命名管道FIFO: 1 ) FIFO可以在无关的进程之间交换数据

2 ) FIFO与路径名相关联,作为特殊的设备文件存在于文件系统内。

2 .系统IPC: 2.1消息队列的消息队列是消息的链表,存储在内核中。 消息队列由标识符(即队列ID )标记。 )消息队列克服了信令信息少、管道只能承载未格式化字节流、缓冲区大小受限等特点)具有写入权限的过程按照一定的规则在消息队列中更新对消息队列具有读取权限的进程可以从消息队列读取信息。

特点:

1 )消息队列是面向记录的,消息具有特定的格式和特定的优先级。

2 )消息队列独立于发送和接收过程。 进程终止不会删除消息队列及其内容。

3 )消息队列可以实现消息的随机查询,其中消息可以不一定以先进先出的顺序读取,也可以以消息的类型读取。

2.2信号semaphore信号(semaphore )与前面介绍的IPC结构不同,是用于控制多个进程对共享资源的访问的计数器。 信号用于实现进程之间的互斥和同步,而不是存储进程之间的通信数据。

特点:

1 )信号用于进程之间的同步,需要合并共享内存才能在进程之间传输数据。

2 )信号量基于操作系统的PV操作,程序信号量操作均为原子操作。

3 )每次对信号量的PV操作不仅可以将信号量的值加1或减1,还可以加减任何正整数。

4 )支持信号量集团。

2.3信号signal信号是相对复杂的通信方式,用于向接收进程通知某些事件的发生。

2.4共享内存使多个进程可以访问同一内存空间,不同进程可以立即看到对方进程更新共享存储器中的数据。 这种方式需要依赖互斥锁和信号量等同步操作

特点:

1 )共享内存是最快的IPC。 这是因为进程直接访问存储器

2 )多个进程可以同时操作,需要同步

3 )信号共享存储器通常被组合使用,并且信号被用于同步对共享存储器的访问

3 .套接字套接字套接字:套接字也是进程间通信机制,与其他通信机制不同,它可以用于不同主机之间的进程通信。

线程间通信的方式:

关键区域:适合多线程串行化访问公共资源或代码,并快速控制数据访问

独占同步/锁定:采用独占对象机制,只允许具有独占对象的线程访问公共资源。 由于只有一个互斥对象,因此可以防止多个线程同时访问公共资源

信号Semphare旨在控制有限数量的用户资源,允许多个线程同时访问同一资源,但通常需要限制可以同时访问同一资源的线程的最大数量。

通过事件(信号)、等待/通告(Wait/Notify )通知操作保持多线程同步,也可以轻松实现多线程优先级比较操作

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。