社区
C++ 语言
帖子详情
提问帖,请问Linux共享内存的全局变量的差别
吾心安处方是家
2012-09-02 04:53:56
这里只谈Linux下多线程获取通一块数据的问题:
比如线程A和B他们格要查看一个数据对象num
1 全局变量的做法是这个int num只要是A和B都能访问到的即可,我做一个带锁的get,set函数就可以了
2 但是网上还有nmap和shmat的方法,我自己也尝试了皮毛。
所以不太理解,全局变量这种共享方式的存在是否合理。就来问一下各位了。希望知道的帮我解惑!!
...全文
680
6
打赏
收藏
提问帖,请问Linux共享内存的全局变量的差别
这里只谈Linux下多线程获取通一块数据的问题: 比如线程A和B他们格要查看一个数据对象num 1 全局变量的做法是这个int num只要是A和B都能访问到的即可,我做一个带锁的get,set函数就可以了 2 但是网上还有nmap和shmat的方法,我自己也尝试了皮毛。 所以不太理解,全局变量这种共享方式的存在是否合理。就来问一下各位了。希望知道的帮我解惑!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq120848369
2012-09-03
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
引用 3 楼 的回复:
回2楼
你是指,共享内存是多process之间的通信方式吧?
如果你是纠结于多进程没法互斥访问共享内存, 那你了解一下如何使用进程共享的mutex和cond,另外了解一下POSIX和SYSTEM V信号量。
你提到的MMAP和SHMGET也是POSIX和SYSTEM V的两种共享内存形式。
说你没学会C语……
[/Quote]
共享内存是多进程通信用的, 多线程随便你怎么做, 你不会malloc就用全局变量吧。
吾心安处方是家
2012-09-03
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
回2楼
你是指,共享内存是多process之间的通信方式吧?
如果你是纠结于多进程没法互斥访问共享内存, 那你了解一下如何使用进程共享的mutex和cond,另外了解一下POSIX和SYSTEM V信号量。
你提到的MMAP和SHMGET也是POSIX和SYSTEM V的两种共享内存形式。
说你没学会C语言是因为你认为线程间共享的东西只……
[/Quote]
嗯,想问下,全局变量和共享内存比较,是不是效率上有差异,所以要用共享内存这种比较繁琐的方式。
qq120848369
2012-09-02
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
回2楼
你是指,共享内存是多process之间的通信方式吧?
[/Quote]
如果你是纠结于多进程没法互斥访问共享内存, 那你了解一下如何使用进程共享的mutex和cond,另外了解一下POSIX和SYSTEM V信号量。
你提到的MMAP和SHMGET也是POSIX和SYSTEM V的两种共享内存形式。
说你没学会C语言是因为你认为线程间共享的东西只能定义成全局变量,你难道想不出其他线程间共享变量的方法了吗?
吾心安处方是家
2012-09-02
打赏
举报
回复
回2楼
你是指,共享内存是多process之间的通信方式吧?
qq120848369
2012-09-02
打赏
举报
回复
楼主还是没掌握好C语言, 难道把变量和锁的地址传到两个线程里, 让两个线程去加锁操作就不行了吗?
genio
2012-09-02
打赏
举报
回复
共享内存用于跨进程,全局变量没法跨进程
Windows内核-内存管理
- Windows内存管理主要学习什么 - 线性地址是如何管理的 - 物理地址是如何管理的 - 缺页异常解决了什么问题 - 堆,栈这些内存是怎么申请的 - Windows内核情景分析 第三章 - 不管什么程序,除了程序代码本身所占用的空间外,程序在运行过程中总得使用一定的内存空间,因为数据也要占用空间。这些存储数据的内存空间大致可分为三类: -
全局变量
:编译工具链接的时候就静态的分配好了 - 局部变量:调用子函数的时候,在栈上分配 - 通过malloc分配,可以通过free释放,重复利用 - 每个进程都有4GB的空间,但是这4GB空间并不是都在使用,有没有一个地方在记录着哪些地址空间已经使用了,哪些没有使用? - 肯定有一个地方在记录 - 怎么记录线性地址是否是可以用的? - 每个进程都有自己的线性地址管理
Linux
之进程间通信——system V(
共享内存
、消息队列、信号量等)
本文介绍了另一种进程间通信——system V,主要介绍了
共享内存
,消息队列、信号量,当然消息队列了信号量并非重点,简单了解即可。
Linux
之环境变量
本文介绍了环境变量的相关概念。
dll多次实例化静态变量共享问题(
linux
,windows)
dll多次实例化时,系统会为每个实例分配独立的内存空间,静态变量也不例外,要想多个dll实例共用同一静态变量,目前查到最好的方法是通过编译参数,实现这个目的。
Linux
和Windows下均有各自的方法。 以下是我觉得比较好的两篇文章,附上出处,由于是简单拷贝,失去了原文格式,建议去看原文。 声明:由于同时转载了两篇文章,若发布类型选择转载只能填写一个转载链接,故发布类型选择原创,本文章实为转载,请支持原创。 Windows下实现: 版权声明:本文为CSDN博主「zslInSz」的原创文章,遵循CC
Linux
--虚拟内存地址空间(转载)
每一个进程,都拥有自己的虚拟内存地址空间虚拟内存地址空间的本质,就是我们上面验证的那个进程地址空间,这俩是一个东西每一个进程都不知道外部其他进程的存在,都认为自己独享物理内存,并且拥有4G的空间但实际上,并不是真正拥有4G内存,而是按需分配物理内存!其实,这本质不就是老板给员工画的一张饼吗?我们假设的认为:操作系统 --- 老板进程 --- 员工虚拟内存地址空间 --- 老板给员工画的饼物理内存 --- 真正的好处(例如:真的升职了,真的加薪了)
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章