关于共享内存的疑问

joseph_hsw 2014-02-27 05:21:25
创建一个了个共享内存之后,如果同时有多个进程同时访问会如何?
会不会一个进程修改了内存中的值,但是另一个进程读到的确实未修改的值呢?

如果会改变,那边考虑进程锁?

...全文
183 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-02-28
  • 打赏
  • 举报
回复
引用 10 楼 mrlgy 的回复:
[quote=引用 9 楼 zhao4zhong1 的回复:] [quote=引用 7 楼 u011339091 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 参考 Microsoft SDK\samples\winbase\SharedMem\Consumer.Cpp Microsoft SDK\samples\winbase\SharedMem\Makefile Microsoft SDK\samples\winbase\SharedMem\Producer.Cpp Microsoft SDK\samples\winbase\SharedMem\Queue.h Microsoft SDK\samples\winbase\SharedMem\ReadMe.Txt Microsoft SDK\samples\winbase\SharedMem\Common.h
这个在哪里有源码?[/quote] 搜索下载Microsoft SDK[/quote] 哪一个版本的sdk[/quote] 我一般不提版本,就默认6.0
mrlgy 2014-02-28
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 u011339091 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 参考 Microsoft SDK\samples\winbase\SharedMem\Consumer.Cpp Microsoft SDK\samples\winbase\SharedMem\Makefile Microsoft SDK\samples\winbase\SharedMem\Producer.Cpp Microsoft SDK\samples\winbase\SharedMem\Queue.h Microsoft SDK\samples\winbase\SharedMem\ReadMe.Txt Microsoft SDK\samples\winbase\SharedMem\Common.h
这个在哪里有源码?[/quote] 搜索下载Microsoft SDK[/quote] 哪一个版本的sdk
赵4老师 2014-02-28
  • 打赏
  • 举报
回复
引用 7 楼 u011339091 的回复:
[quote=引用 6 楼 zhao4zhong1 的回复:] 参考 Microsoft SDK\samples\winbase\SharedMem\Consumer.Cpp Microsoft SDK\samples\winbase\SharedMem\Makefile Microsoft SDK\samples\winbase\SharedMem\Producer.Cpp Microsoft SDK\samples\winbase\SharedMem\Queue.h Microsoft SDK\samples\winbase\SharedMem\ReadMe.Txt Microsoft SDK\samples\winbase\SharedMem\Common.h
这个在哪里有源码?[/quote] 搜索下载Microsoft SDK
zhuobattle 2014-02-28
  • 打赏
  • 举报
回复
创建一个共享名的事件event或者Mutex,然后每个进程进去前都等待这个event或mutex, 访问完成后再释放这个event或mutex. 这是最简单的。 如果考虑读写锁的话,那么麻烦点。 下面这篇文章读写锁考虑的比较齐全,可以参考下。 http://blog.csdn.net/querw/article/details/7214925
joseph_hsw 2014-02-28
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
参考 Microsoft SDK\samples\winbase\SharedMem\Consumer.Cpp Microsoft SDK\samples\winbase\SharedMem\Makefile Microsoft SDK\samples\winbase\SharedMem\Producer.Cpp Microsoft SDK\samples\winbase\SharedMem\Queue.h Microsoft SDK\samples\winbase\SharedMem\ReadMe.Txt Microsoft SDK\samples\winbase\SharedMem\Common.h
这个在哪里有源码?
ForestDB 2014-02-28
  • 打赏
  • 举报
回复
不介意脏读就无所谓,否则就要同步。
赵4老师 2014-02-27
  • 打赏
  • 举报
回复
参考 Microsoft SDK\samples\winbase\SharedMem\Consumer.Cpp Microsoft SDK\samples\winbase\SharedMem\Makefile Microsoft SDK\samples\winbase\SharedMem\Producer.Cpp Microsoft SDK\samples\winbase\SharedMem\Queue.h Microsoft SDK\samples\winbase\SharedMem\ReadMe.Txt Microsoft SDK\samples\winbase\SharedMem\Common.h
joseph_hsw 2014-02-27
  • 打赏
  • 举报
回复
如果不考虑锁,而采用多个共享内存块的方式呢? 效率会不会比较低下? 在操作的时候,先查询共享内存块的序列,如果正在使用,则继续查找下一个。
vipcxj 2014-02-27
  • 打赏
  • 举报
回复
还有传说中的共享锁,就是用来解决读多写少的锁保护的效率问题
vipcxj 2014-02-27
  • 打赏
  • 举报
回复
只要保证所有线程都只读不写,就不需要保护了
YTerrenceLau 2014-02-27
  • 打赏
  • 举报
回复
所有访问共享内存的任务都要考虑,所有访问都要用锁保护,才能避免数据的不一致。 至于有人说读不需要保护,写需要保护,你看看就行了,不要当真。只有极其特殊的情况下,读才不需要考虑。
YTerrenceLau 2014-02-27
  • 打赏
  • 举报
回复
这是一个时间差的问题,如果时间差非常小,或者处理特殊,这种情况是会发生的。 所以,用一个全局锁来保护是很有必要的。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧