Adi*_*rda 5 c# c++ synchronization process
我们有2个申请.一个用C#编写,另一个用C++编写.我们需要维护这些进程之间共享的计数器(在内存中).每当其中一个应用程序启动时,它需要检查此计数器并增加它,每次应用程序关闭时都需要减少计数器.如果应用程序使用任务管理器崩溃或关闭,我们还需要减少计数器.
我们考虑使用其中一个OS同步对象,如MUTEX.
我的问题:什么样的同步对象最适合跨进程(当一个是C#和另一个C++时)
希望我的问题很明确.
非常感谢你,
阿迪巴尔达
你可能会忘记命名信号量.信号量基本上是一个计数,它允许开发人员限制访问某些资源的线程/进程数.通常它就是这样的
WaitForSingleObject或者类似的,每个线程都在不等待的情况下继续.每次内部信号量计数器出现故障时.ReleaseSemaphore函数释放信号量.此函数递增信号量的内部计数器.我不认为这是你想要使用它的方式.所以,你应该:
WaitForSingleObject(hSemaphore, 0),减少计数器.0意味着你不想等待.这一切都很简单.
在C++中
//create semaphore
HANDLER hSemaphore = CreateSemaphore(NULL, 0, BIG_NUMBER, "My cool semaphore name");
//increase counter
LONG prev_counter;
ReleaseSemaphore(hSemaphore, 1, &prev_counter);
//decrease counter
WaitForSingleObject(hSemaphore, 0);
Run Code Online (Sandbox Code Playgroud)
在C#中
using System.Threading;
//create semaphore
Semaphore sem = new Semaphore(0, BIG_NUMBER, "My cool semaphore name");
//increase counter
int prev_counter = sem.Release();
//decrease counter
sem.WaitOne(0);
Run Code Online (Sandbox Code Playgroud)
名称和BIG_NUMBERs显然应该相同.
如果这不足以完成您的任务,您将不得不查看共享内存并通过命名的互斥锁锁定对它的访问权限,但这有点复杂.
| 归档时间: |
|
| 查看次数: |
9366 次 |
| 最近记录: |