当前位置: 技术问答>linux和unix
一个程序设计的小问题,请教下大家
来源: 互联网 发布时间:2016-05-17
本文导语: 我在linux下用c写程序的时候碰到这样一个问题要实现: 在一个独立的进程中有一个公共列表(可以理解为一个数组),里面保存了若干个数据,现在有其他3个相同的进程都要访问这个公共列表,比如说第一个进程...
我在linux下用c写程序的时候碰到这样一个问题要实现:
在一个独立的进程中有一个公共列表(可以理解为一个数组),里面保存了若干个数据,现在有其他3个相同的进程都要访问这个公共列表,比如说第一个进程取列表的第一个元素,做相应处理,第2个进程取第2个元素,第3个进程取第3个元素,...这样保证3个进程能顺利地取完公共列表的所有元素,然后再刷新公共列表,开始下一次处理过程,这3个进程和有公共列表的进程我是用管道进行通信的,我开始的想法是在含有公共列表的进程中开了3个子线程,负责和3个进程之间的通信,但是发现实现起来的时候有点乱,不知道大家有没有更好的想法提供给我参考,谢谢!
在一个独立的进程中有一个公共列表(可以理解为一个数组),里面保存了若干个数据,现在有其他3个相同的进程都要访问这个公共列表,比如说第一个进程取列表的第一个元素,做相应处理,第2个进程取第2个元素,第3个进程取第3个元素,...这样保证3个进程能顺利地取完公共列表的所有元素,然后再刷新公共列表,开始下一次处理过程,这3个进程和有公共列表的进程我是用管道进行通信的,我开始的想法是在含有公共列表的进程中开了3个子线程,负责和3个进程之间的通信,但是发现实现起来的时候有点乱,不知道大家有没有更好的想法提供给我参考,谢谢!
|
使用共享内存存放公共列表,其它进程去读就是了。
|
使用共享内存存放公共列表,其它进程去读和写(更新)
如果需要访问相同部分,则加互斥锁。
这样应该比你那个方法更好点。
如果需要访问相同部分,则加互斥锁。
这样应该比你那个方法更好点。
|
我感觉既然是其他进程和一个拥有公共资源的进程的关系。而这个公共资源又不互相不冲突的。
你可以给它简化成进程间通信问题。
进程通信可以用消息队列,也可以用共享内存,当然你也可以用socket通信。
这三个方法随便哪个都能实现你的要求
你可以给它简化成进程间通信问题。
进程通信可以用消息队列,也可以用共享内存,当然你也可以用socket通信。
这三个方法随便哪个都能实现你的要求
|
共享内存是好办法
是不是还要考虑互斥的问题
是不是还要考虑互斥的问题
|
看楼主的意思是各个进程访问不同的内容,这样就不需要考虑互斥问题。
|
hash.
|
共享内存,如果需要访问相同部分,则加互斥锁。
|
Hash速度快,但空间浪费太厉害
|
同意二楼和楼上的,