概念:
共享内存指的是操作系统在物理内存中申请一块空间,应用程序可以映射到这块空间,进行直接读写操作
特点:
1.共享内存是最高效的进程间通信方式,进程可以直接读写内存,不需要数据拷贝
2.多进程间交换信息,内核留出一块内存区,将访问进程映射到自己私有地址的空间
3.进程直接读写内存不需要数据拷贝
4.多个进程共享一个内存,需要某种同步机制。
操作步骤:
- 创建唯一key值 ftok
- 创建或打开共享内存shmget
- 映射共享内存shmat
- 取消映射shmdt
- 删除共享内存shmctl
补充:
共享内存的一个重要特点是其高效性。由于所有进程直接访问同一块内存,因此访问速度非常快,类似于访问进程自身的内存空间
共享内存同步和互斥访问的最佳实践是什么?
共享内存同步和互斥访问的最佳实践涉及多种方法,每种方法都有其优缺点。以下是几种常见的最佳实践:
- 互斥锁(Mutex) :
- 使用场景:当需要确保一个进程在任何时刻只能访问共享资源时,互斥锁是一个非常有效的方法。
- 优点:简单易用,能够有效地防止多个进程同时访问同一段代码。
- 缺点:如果频繁地进行锁的获取和释放操作,可能会导致性能瓶颈。
- 最佳实践:在C++中,可以使用
std::mutex
来实现互斥锁,并且在使用前应确保正确初始化和清理。 - 信号量(Semaphore) :
- 使用场景:适用于需要控制进程对共享资源访问数量的情况,比如限制同时访问的进程数。
- 优点:比互斥锁更灵活,可以初始化为任何非负整数值,从而控制访问数量。
- 缺点:实现相对复杂,需要更多的编程技巧。