社区
C++ 语言
帖子详情
进程间共享内存如何互斥?
dukang_2005
2009-06-10 11:58:56
比如开辟了一块进程共享内存,为了实现互斥修改,在共享内存开始的地方放个 pthread_mutex_t mutex, 然后多个进程都对这个mutex进行lock可以么?pthread_mutex_t mutex放在共享内存里和 进程内部的用法是同样的吧?
...全文
1415
14
打赏
收藏
进程间共享内存如何互斥?
比如开辟了一块进程共享内存,为了实现互斥修改,在共享内存开始的地方放个 pthread_mutex_t mutex, 然后多个进程都对这个mutex进行lock可以么?pthread_mutex_t mutex放在共享内存里和 进程内部的用法是同样的吧?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq120848369
2012-03-27
打赏
举报
回复
[Quote=引用 10 楼 geodge831012 的回复:]
引用 5 楼 mymtom 的回复:
引用 4 楼 drq6772 的回复:
基本原理是这样:
down(&mutex) //进入临界区
...
...
...
up(&mutex) //出临界区
至于LZ说的pthread_mutex_t mutex我没用过,但感觉不应该放在共享内存里吧?
个人意见,仅供参考。
pthread_mut……
[/Quote]
++
lily0628
2012-03-27
打赏
举报
回复
CriticalSection也可以的吧
EnterCriticalSection(&cs);
//dosometing...
LeaveCriticalSection(&cs);
实践是最好的学习
2012-03-27
打赏
举报
回复
[Quote=引用楼主 dukang_2005 的回复:]
比如开辟了一块进程共享内存,为了实现互斥修改,在共享内存开始的地方放个 pthread_mutex_t mutex, 然后多个进程都对这个mutex进行lock可以么?pthread_mutex_t mutex放在共享内存里和 进程内部的用法是同样的吧?
[/Quote]
用带PTHREAD_PROCESS_SHARED属性来初始化你的mutex就可以了
pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&mutex, &mattr);
我的理解是,既然phread_mutex_t能通过锁同一个文件来实现进程间共享,那么通过锁共享内存也应该能实现,因为共享内存貌似也是映射到文件的
geodge831012
2009-10-22
打赏
举报
回复
[Quote=引用 5 楼 mymtom 的回复:]
引用 4 楼 drq6772 的回复:
基本原理是这样:
down(&mutex) //进入临界区
...
...
...
up(&mutex) //出临界区
至于LZ说的pthread_mutex_t mutex我没用过,但感觉不应该放在共享内存里吧?
个人意见,仅供参考。
pthread_mutex_t的名字本身已经已经说明是用于Posix线程间同步的。
进程间互斥用信号量(Posix信号量和SYS V信号量都可以),简单的也可以用文件锁。
sem_open, semget, lockf
[/Quote]
mutex的属性中有进程间共享的参数选择,PTHREAD_PROCESS_SHARED
arong1234
2009-06-11
打赏
举报
回复
带名字的mutex是可以在多个进程中进行并发控制的。
例如Win32里CreateMutex最后一个参数就允许你指定一个名字,则同一台机器上的同名mutex都受控制
没用过pthread_mutex_t,估计有同样的机制,去找找它初始化函数的参数说明
mymtom
2009-06-11
打赏
举报
回复
[Quote=引用 4 楼 drq6772 的回复:]
基本原理是这样:
down(&mutex) //进入临界区
...
...
...
up(&mutex) //出临界区
至于LZ说的pthread_mutex_t mutex我没用过,但感觉不应该放在共享内存里吧?
个人意见,仅供参考。
[/Quote]
pthread_mutex_t的名字本身已经已经说明是用于Posix线程间同步的。
进程间互斥用信号量(Posix信号量和SYS V信号量都可以),简单的也可以用文件锁。
sem_open, semget, lockf
drq6772
2009-06-11
打赏
举报
回复
基本原理是这样:
down(&mutex) //进入临界区
...
...
...
up(&mutex) //出临界区
至于LZ说的pthread_mutex_t mutex我没用过,但感觉不应该放在共享内存里吧?
个人意见,仅供参考。
性能侠客行
2009-06-11
打赏
举报
回复
互斥可以在不同的进程中使用,
但是使用完后,要及时释放,互斥信号量。。。。
mengde007
2009-06-11
打赏
举报
回复
互斥可以在不同的进程中使用;
superyys
2009-06-11
打赏
举报
回复
pthread_mutex_t mutex是在unix类操作系统里用,只对一个进程内的多个线程有效,
你这种情况需要用信号量作互斥锁
tanglg888
2009-06-11
打赏
举报
回复
Windows下使用命名Mutex
Unix下使用信号量
once_and_again
2009-06-11
打赏
举报
回复
pthread_mutex_t
跟共享内存没有直接的关系?
共享 内存 是对 内存里的指针来操作的。
lylm
2009-06-11
打赏
举报
回复
同意5楼,pthread是支持Posix标准的线程库,与进程不同
linux无亲缘关系
间
进程
同步通信实现(
互斥
锁+条件变量+
共享内存
模式)
说明:编译时加上参数 -lrt -lpthread 要不然找不到库文件
Linux内核源代码情景分析 (上下册 高清非扫描 )
本PDF电子书包含上下两册,共1576页,带目录,高清非扫描版本。 作者: 毛德操 胡希明 丛书名: Linux内核源代码情景分析 出版社:浙江大学出版社 目录 第1章 预备知识 1.1 Linux内核简介. 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架 2.2 地址映射的全过程 2.3 几个重要的数据结构和函数 2.4 越界访问 2.5 用户堆栈的扩展 2.6 物理页面的使用和周转 2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空
间
的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和服务 3.5 软中断与Bottom Half 3.6 页面异常的进入和返回 3.7 时钟中断 3.8 系统调用 3.9 系统调用号与跳转表 第4章
进程
与
进程
调度 4.1
进程
四要素 4.2
进程
三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6
进程
的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的
互斥
操作 第5章 文件系统 5.1 概述 5.2 从路径名到目标节点 5.3 访问权限与文件安全性 5.4 文件系统的安装和拆卸 5.5 文件的打开与关闭 5.6 文件的写与读 5.7 其他文件操作 5.8 特殊文件系统/proc 第6章 传统的Unix
进程
间
通信 6.1 概述 6.2 管道和系统调用pipe() 6.3 命名管道 6.4 信号 6.5 系统调用ptrace()和
进程
跟踪 6.6 报文传递 6.7
共享内存
6.8 信号量 第7章基于socket的
进程
间
通信 7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数sys—listen()——设定server插口 7.5函数sys—accept()——接受连接请求 7.6函数sys—connect()——请求连接 7.7报文的接收与发送 7.8插口的关闭 7.9其他 第8章设备驱动 8.1概述 8.2系统调用mknod() 8.3可安装模块 8.4PCI总线 8.5块设备的驱动 8.6字符设备驱动概述 8.7终端设备与汉字信息处理 8.8控制台的驱动 8.9通用串行外部总线USB 8.10系统调用select()以及异步输入/输出 8.11设备文件系统devfs 第9章多处理器SMP系统结构 9.1概述 9.2SMP结构中的
互斥
问题 9.3高速缓存与内存的一致性 9.4SMP结构中的中断机制 9.5SMP结构中的
进程
调度 9.6SMP系统的引导 第10章系统引导和初始化 10.1系统引导过程概述 10.2系统初始化(第一阶段) 10.3系统初始化(第二阶段) 10.4系统初始化(第三阶段) 10.5系统的关闭和重引导
互相独立
进程
间
共享内存
互斥
访问的解决办法
前提:两个
进程
互相独立,访问同一片
共享内存
存在问题:1、如何避免两个
进程
同时访问
共享内存
(一旦两个
进程
同时访问一个临界区,后果是程序崩溃)2、如果使用
互斥
锁,如何让两个
进程
拿到同一个
互斥
锁解决办法:针对问题1,可以使用信号,信号量,
互斥
锁来进行同步,但是信号和信号量需要两个
进程
都实现一套自己的逻辑(访问临界区前,先检查冲突标志,如果没有冲突则访问,并向其它的所有
进程
依次发送信号,告诉它们我要开始访...
Linux
进程
间
互斥
锁 (
共享内存
实现)
01 原理 开辟一块
共享内存
,使得相关
进程
均可访问同一块区域,再将
互斥
锁定义在该区域(即
共享内存
)上,使得相关
进程
可以使用该锁。 02
进程
间
的
互斥
锁和线程
间
互斥
锁的区别 函数pthread_mutex_init(
互斥
锁地址, 属性对象地址)在定义一把线程锁的时候第二个参数通常传为NULL,这样该锁默认只能被统一
进程
下的线程持有。 如果要将其定义为
进程
之
间
可以持有的
互斥
锁,则需要传入属性对象地址。...
实验四:
进程
间
共享内存
1.Windows下的
进程
间
共享内存
是如何实现的? 2.对于读写
进程
,物理内存是什么时候分配的? 3.读写
进程
之
间
的同步和
互斥
在
共享内存
机制中已经存在了,还是需要用户自己来实现? 4.利用“虚拟内存的检测”程序检测读
进程
所映射的虚拟地址空
间
块的信息。
C++ 语言
64,662
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章