浅谈共享内存与信号的互用

来源:互联网 发布:西门子plc s7编程软件 编辑:程序博客网 时间:2024/06/07 04:09

作者:曹冬洋,华清远见嵌入式学院讲师。

共享内存是进程间通信(IPC)的一种。因为进程在使用共享内存时,可以直接读写内存,不需要任何数据拷贝,所以它的效率是最高的。关于共享内存是内核专门留出来的一块内存,这段内存可以让访问的进程映射到自己的私有地址空间,从而可以操作共享内存。 共享内存可以让不同的进程来映射地址,从而实现了进程之间的通信。

多个程序都来操作共享内存,需要一种同步机制,下面来介绍信号同步的机制。

共享内存的实现分为三步:第一步是创建共享内存,用的函数是shmget()函数;第二步是映射共享内存,用的函数是shmat();最后一步是撤销映射,用的函数是shmdt()。


建立好共享内存后,我是用信号来实现同步机制的,当然也可以用信号量等其他的。 使用信号需要了解kill()信号发送函数和signal()捕捉信号函数。首先kill函数需要知道对方进程的进程号,所以第一步就是获得对方的进程号,可以通过共享内存获得。然后获得自己的进程号再通过共享内存发给对方。


这样当一个进程操作完以后,就可以发信号给另一个进程,实现了进程之间的同步。

更多免费资料,尽在华清远见嵌入式学院免费课堂:http://www.embedu.org/lecture/

原创粉丝点击