操作系统:Windows 语言:C/C++
设计要求跨进程及其子进程使用互斥变量。 如果我在一个进程中创建互斥锁,我必须在另一个进程中打开互斥锁以检查关键部分的可用性。 要打开互斥量,我需要知道在父进程中创建的互斥量的名称。假设,如果我将互斥量保留为我的应用程序名称。我可以知道互斥量的名称,因为它是固定的。但是,如果我并行加载我的应用程序的第二个实例,就会出现困惑。
以下是更好的主意吗? 我有一个想法,将父进程中的互斥量命名为进程 ID。所以现在我需要从子进程/大子进程中获取父进程 ID 以打开互斥锁。 我想没有直接的方法可以从大子进程中获取父进程 ID。所以我必须在每个创建进程 api 中传递进程 ID(在 lpenvironment 参数中)。
谁能推荐一个简单的方法,因为互斥锁是最常用的....我是新手。
最佳答案
主要思想很好,但您也许可以进行一些实现调整。
首先,如果您的应用程序涉及多个进程协作,那么生成子进程的主“ Controller ”进程可以轻松地通过命令行参数传递其 PID。如果子进程也生成自己的子进程,则它们可以通过相同的机制传输 PID。
更进一步,您还可以完全跳过 PID,并通过命令行参数将互斥锁名称本身传递给子进程。这种方法的优点是父进程和子进程不需要同时包含从 PID 派生互斥锁名称的代码。通过传递互斥量名称本身,您可以将子进程与必须知道它是如何产生的分离。许多主流应用程序都使用这种方法,例如谷歌浏览器。
最后,您可以通过向互斥量名称添加随机字符串(也许是 GUID?)来做得更好。我不相信有人会用相同的名称命名他们自己的全局同步对象,但一些额外的预防措施不会有坏处。
关于c - 跨进程使用 Mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326780/