进程间共享内存如何互斥?

dukang_2005 2009-06-10 11:58:56
比如开辟了一块进程共享内存,为了实现互斥修改,在共享内存开始的地方放个 pthread_mutex_t mutex, 然后多个进程都对这个mutex进行lock可以么?pthread_mutex_t mutex放在共享内存里和 进程内部的用法是同样的吧?
...全文
1465 14 打赏 收藏 转发到动态 举报
写回复
用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);
  • 打赏
  • 举报
回复
[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标准的线程库,与进程不同

65,207

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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