多进程锁机制
visual studio 2008 - Lock mechanism for multiple process c++
我的问题与多个应用程序使用的共享内存对象中的互斥锁的工作逻辑有关。
假设我们有两个函数,它们对共享内存中创建的对象执行一些操作。
void funcA ()
{
// put some mutex here
/*
.
do the operation on the shared object here
.
*/
}
void funcB ()
{
// put some mutex here
/*
.
do the operation on the shared object here
.
*/
}
既然互斥锁锁的是代码而不是共享内存对象,那么是否有可能一个应用程序调用funcA并对共享对象执行一些操作,而另一个应用程序调用funcB同时对同一对象执行另一个操作?
如何防止这种行为?哪种boost互斥锁类型适合多进程和应用?
我不知道boost的实现,但是如果您使用posix线程的平台,您可以使用本机线程实现。您创建一个带有"进程共享"属性的pthread_mutex_t,并将其放入共享内存中,您可以从两个进程访问它。
在Daryl Gove的《多核应用程序编程》(优秀的)一书中有一节详细介绍了如何做到这一点,无论如何,对于多线程c++开发来说,这本书非常值得一读。这个例子的互斥属性部分是:
pthread_mutex_t * mutex;
pthread_mutexattr_t attributes;
pthread_mutexattr_init( &attributes );
pthread_mutexattr_setpshared( &attributes, PTHREAD_PROCESS_SHARED );
...
在设置了互斥锁的属性之后,这将互斥锁定义为进程共享互斥锁,然后您可以将其放入共享内存中以供多个进程访问,并保护对共享数据结构的访问。
考虑到它存在于posix线程实现中,因此值得仔细查看boost线程库中的进程共享属性,以查看是否也暴露了在那里使用它。
(编辑:我刚刚注意到你的帖子上有visual studio标签,所以你使用的是Windows线程——很抱歉你的回答是正面的!
使用Windows线程(同样是原生的),您可以通过创建命名互斥锁在进程之间共享互斥锁,并在多个进程之间通过名称访问它。)
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- c++多进程编写一个唯一的文件
- 多线程:线程或进程.h - C++
- 在 Windows/C++ 上使用多进程应用程序的高精度定时操作
- 优化吞吐量:多线程与多进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 进程退出,返回值3221225477访问多维向量
- 多进程 c++(11),链表指针作为全局变量
- 与多线程一起登录多进程应用程序
- 分析多进程系统
- C++如何检查文件是否在使用-多线程多进程系统
- GDB/DDD:使用多进程应用程序 C/C++调试共享库
- 多线程和多进程应用程序的锁定机制之间有什么区别
- 如何计算Linux中多进程应用程序的CPU使用率
- c++ /SQLite -数据库访问与多进程
- 多进程锁机制
- C++多进程共享内存实现
- 同步多进程与FileLock()读/写同一文件c++ win32
- OpenSSL pkcs# 11签名多进程