Linux下多任务间通信和同步-System V共享内存
Linux下多任务间通信和同步-System V共享内存
嵌入式开发交流群280352802,欢迎加入!
1.简介共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间.进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率.由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等.
注意:共享内存,消息队列和信号量是由内核维护的进程间通信方式,它们一IPC结构的结构存在于内核中,在内部以标示符加以应用,而在外部则通过键值引用.键的数据结构为key_t类型,由内核负责将它转换为标示符.命令ipcs可以提供系统中所有的共享内存,消息队列和信号量的标示符和键.
4.shmat系统调用该系统调用将shmget返回的区域映射到进程的内存空间中.shmat函数语法:
该系统调用解除被共享内存区域与进程地址addr的映射关系.shmdt函数语法:
下面我们看一个例子.