互斥和进程同步;C++
Mutual excluding and process synchronization; C++
我在 2 个进程同步方面遇到问题。我有 3 个 X 进程和 5 个 Y 进程。我还有 2 种资源 - A 和 B。
资源"A"最多可以同时由 3 个进程使用,并且通过访问资源"B"相互排除是必要的。
过程 X 和 Y:
void processX()
{
while (1)
{
AccessToResource(B);
AccessToResource(A);
}
}
void processY()
{
while (1)
{
AccessToResource(A);
AccessToResource(B);
}
}
我怎样才能使用信号量、互斥体、事件,最短的方式做到这一点?
现在我有
CSemaphore sem(1,5,L"semaph");
并通过 SEM 使用它。Lock() 和 sem。在访问资源之前和之后解锁(),但它不是很好。
资源"A"最多可由 3 个进程使用
计数信号量在这里是合适的(见维基)。它的工作原理是:
您有一些计数器(因此名称)初始化为 0。每当某个进程拥有资源 A 时,它都会将该信号量增加 1。如果在您的情况下计数达到 3,则意味着已经有 3 个进程使用资源"A"。进程使用完资源"A"后,它将该计数器(semafore)减少 1,从而允许其他进程使用该资源。
通过访问资源"B"相互排斥是必要的
这里合适的解决方案是互斥锁(或二进制信号量)。它们的工作原理几乎相同 - 区别在于mutex
强调欠资源。
相关文章:
- Windows 进程间同步类似事件?
- 如何使用一个信号灯同步 3 个进程?
- 使计时器在C++进程中的特定时间关闭,以便同步两个进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 如何为以下代码进行进程同步
- 互斥和进程同步;C++
- boost::OSX 上 32 位和 64 位程序之间共享内存中的进程间同步机制(互斥体、条件)
- 进程重定向可以在bash中同步吗
- 如何将记忆映射的文件与另一个进程写入文件同步
- 在Windows(win32或C++)中使用互斥锁的进程间同步
- std::launch::async就像同步进程一样阻塞
- 如何在Boost.process 0.5中与进程同步交互
- 执行这些 Boost::进程间组件需要同步
- MailSlot的进程同步
- 如何使用管道同步父进程和子进程
- Win32 将同步事件发送到其他进程
- 使用 WinAPI/C++ 在 Windows 上的进程之间进行多读取器、单写入器同步锁定
- 有没有办法在考虑到崩溃的情况下同步进程
- POSIX 跨进程共享内存同步 C++/C++11
- 进程同步技术