我试图创建一个可继承的Win32 Semaphore对象。这意味着我启动的任何子进程都可能自动有权对同一Win32对象执行操作。
我的代码当前如下所示:
Semaphore semaphore = new Semaphore(0, 10);
Process process = Process.Start(pathToExecutable, arguments);
但是子进程不能使用此代码中的信号量对象。
我正在编写的代码是C ++的一部分。旧的C ++代码通过以下方式实现了这一点:
SECURITY_ATTRIBUTES security = {0};
security.nLength = sizeof(security);
security.bInheritHandle = TRUE;
HANDLE semaphore = CreateSemaphore(&security, 0, LONG_MAX, NULL);
然后,当调用
CreateProcess
时,将bInheritHandles
参数设置为TRUE
。(在C#和C ++情况下,我都使用相同的子进程(即C ++)。它在命令行上使用信号灯ID,并直接在对
ReleaseSemaphore
的调用中使用该值。)我怀疑我需要构造一个特殊的
SemaphoreSecurity
或ProcessStartInfo
对象,但是我还没有弄清楚。
最佳答案
一种选择是只包装用于创建信号量并启动子进程的C ++代码,然后通过P / Invoke(或使用C ++ / CLI)对其进行调用。
关于.net - 如何在.NET中创建可继承的信号量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534497/