1.对共享内存的使用往往伴随着信号量的使用,因为要实现进程间的同步。
2.
用共享内存和信号量实现两进程间的通信:在一个进程间写文字,另一个进程间读文字并打印出来(写一次打印一次)。
step1:
main.c用来写入数据(sem.c,sem.h在信号量中已经创建完善过)
用shmget方法创建一个共享内存,并得到它的id,如若它的id始终等于-1,就说明创建不成功。
创建完共享内存后要链接到一个指向字符串的指针上。
信号量的初始化,将其设置为两个信号量,初始化为1,0,循环输入,定义一个buff数组,将输入的信息保存到buff中。
要比较s和buff之前,就要对第一个初值为1的信号量进行p操作(因为后面要获取s信息了),获取资源,将buff中的值复制到s中去,紧接着对初值为零的信号量进行v操作,开始读取数据。如果字符中是end,就跳出循环。
step2:
test.c用来读数据
如果已经创建成功共享内存,就不在新创建,直接得到id即可。
链接共享内存。
对信号量初始化,进行读取,首次在循环体内对SEM2信号量进行获取资源操作,打印出来后进行v操作,信号量的销毁(两个进程必须有一个有销毁)
step3:运行结果
共享内存和消息队列实现进程间通信
最新推荐文章于 2023-04-06 09:32:29 发布