“生产者和消费者用进程(而非线程)模拟,缓冲区(必须)用共享内存来实现,用信号量实现互斥读写缓冲区。”
我认为程序的基本流程就是由一个主进程生成一段共享内存做缓冲区,主进程去产生一些子进程(Linux下是fork,Windows是克隆,子进程起始执行点不同),子进程互斥读写缓冲区。
我已正确完成Linux下的版本。Linux下信号量是在父子进程间共享的,不用考虑太多。
问题是,Windows下父子进程间共享信号量应该如何实现?我试验将信号量的HANDLE放在共享内存中,然后在主进程中CreateSemaphore,在子进程中做WaitForSingleObject和ReleaseSemaphore。但程序没有出现预期的互斥读写行为,生产者和消费者都没有被等待,随来随执行。
我想可能是因为共享内存中只存了信号量HANDLE,没有存HANDLE指向的信号量对象。不同进程的空间中HANDLE指向的是相互独立的信号量对象。不知道是不是这个原因?
请问,在满足题目要求的情况下(必须用进程模拟、共享内存、信号量机制),如何解决这个问题?谢谢!
3 个解决方案
#1
试下用临界段解决下.
#2
自己解决了!原来是我在子进程中没有OpenSemaphore。
#3
在Linux 里面实现进程间的同步与互斥的控制,封装信号量的接口,做成静态库的方式
#1
试下用临界段解决下.
#2
自己解决了!原来是我在子进程中没有OpenSemaphore。
#3
在Linux 里面实现进程间的同步与互斥的控制,封装信号量的接口,做成静态库的方式