日期:2014-05-16  浏览次数:20718 次

linux下多进程访问共享内存队列同步的问题
1.我要做的是多进程间同步一个共享内存队列,控制同步用的是信号量。
2.队列封装到一个类里。只对外提供三个接口:init push pop。同步的过程对外完全透明。
3.为了保证 信号量的初始值不会在多进程并发执行的情况下被弄乱,并且必须保证其在多个进程间只被初始化一次。并且初始化完之后,才进行semop 操作。
4.为了保证第三点,我想用一个互斥量。
5.为了这个互斥量能够在多进程间共享,在另外一块共享内存里动态分配, 分配之后要设置PTHREAD_PROCESS_SHARED属性。

现在的问题是:设置PTHREAD_PROCESS_SHARED属性 的操作在多进程间是并发执行的,怎么保证这个互斥量只被初始化一次?


或者有没其他更好的方法保证信号量的初始值在多个进程间只被初始化一次?



------解决方案--------------------
探讨
1.我要做的是多进程间同步一个共享内存队列,控制同步用的是信号量。
2.队列封装到一个类里。只对外提供三个接口:init push pop。同步的过程对外完全透明。
3.为了保证 信号量的初始值不会在多进程并发执行的情况下被弄乱,并且必须保证其在多个进程间只被初始化一次。并且初始化完之后,才进行semop 操作。
4.为了保证第三点,我想用一个互斥量。
5.为了这个互斥量能够在多进程间共享……

------解决方案--------------------
探讨

引用:
1.我要做的是多进程间同步一个共享内存队列,控制同步用的是信号量。
2.队列封装到一个类里。只对外提供三个接口:init push pop。同步的过程对外完全透明。
3.为了保证 信号量的初始值不会在多进程并发执行的情况下被弄乱,并且必须保证其在多个进程间只被初始化一次。并且初始化完之后,才进行semop 操作。
4.为了保证第三点,我想用……