互斥和进程同步;C++

Mutual excluding and process synchronization; C++

本文关键字:C++ 进程同步      更新时间:2023-10-16

我在 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强调欠资源