共享内存的进程同步问题, Windows 的 API 真难用!
问题很简单,有多个进程(数量会动态变化)对一块共享内存进行操作,要实现的读写规则如下:
1. 一个进程在写入时其它进程不能读也不能写。
2. 多个进程可以同时读。
3. 只要还有一个进程在读,就不能进行写入。
当读写操作不能进行时应该立即返回不能读写的信息,而不能一直阻塞到可读写的状态。
对写入的判断还好,用 Event 就可以实现了。
读取由于可以多个同时读,所以需要一个计数,于是就用 Semaphore,可是 Windows API 对这个对象提供的操作太弱智了,感觉完全没办法满足要求,请教各位如何设计才能满足上面的同步规则?