c - 跨进程使用 Mutex

标签 c windows winapi process mutex

操作系统:Windows 语言:C/C++

设计要求跨进程及其子进程使用互斥变量。 如果我在一个进程中创建互斥锁,我必须在另一个进程中打开互斥锁以检查关键部分的可用性。 要打开互斥量,我需要知道在父进程中创建的互斥量的名称。假设,如果我将互斥量保留为我的应用程序名称。我可以知道互斥量的名称,因为它是固定的。但是,如果我并行加载我的应用程序的第二个实例,就会出现困惑。

以下是更好的主意吗? 我有一个想法,将父进程中的互斥量命名为进程 ID。所以现在我需要从子进程/大子进程中获取父进程 ID 以打开互斥锁。 我想没有直接的方法可以从大子进程中获取父进程 ID。所以我必须在每个创建进程 api 中传递进程 ID(在 lpenvironment 参数中)。

谁能推荐一个简单的方法,因为互斥锁是最常用的....我是新手。

最佳答案

主要思想很好,但您也许可以进行一些实现调整。

首先,如果您的应用程序涉及多个进程协作,那么生成子进程的主“ Controller ”进程可以轻松地通过命令行参数传递其 PID。如果子进程也生成自己的子进程,则它们可以通过相同的机制传输 PID。

更进一步,您还可以完全跳过 PID,并通过命令行参数将互斥锁名称本身传递给子进程。这种方法的优点是父进程和子进程不需要同时包含从 PID 派生互斥锁名称的代码。通过传递互斥量名称本身,您可以将子进程与必须知道它是如何产生的分离。许多主流应用程序都使用这种方法,例如谷歌浏览器。

最后,您可以通过向互斥量名称添加随机字符串(也许是 GUID?)来做得更好。我不相信有人会用相同的名称命名他们自己的全局同步对象,但一些额外的预防措施不会有坏处。

关于c - 跨进程使用 Mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326780/

相关文章:

c# - 无需安装即可使用 ClickOnce API

c++ - 使用 WinApi 获取与 "Advanced display settings"面板中相同的显示名称

Python,使用 ctypes 创建 C++ 类包装器

c - 为什么添加到指向第一个数组成员的指针在 C 中循环通过它们?

c++ - 如何在指定位置安装Qt?

C++ WinApi : ReadDirectoryChangesW() Receiving Double Notifications

c# - 用于切换 "Show hidden files, folders and drives"的 API

c++ - C++-创建bmp文件并通过createwindow()显示它的问题

c - 如何为 program.c 创建 makefile 以及如何在实时应用程序接口(interface)中编译和执行

c - 如果某个值为零,为什么我们要把它乘以 10