互斥和进程同步; 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.Unlock() 使用它,但它不太好。

Resource'A' may be used by max 3 proceses

计数信号量在这里很合适(参见wiki)。它的工作原理如下:

您有一些初始化为 0 的计数器(因此得名)。每次某个进程拥有资源 A 时,它都会将该信号量增加 1。如果在您的情况下计数达到 3,则意味着已经有 3 个进程在使用资源'A'。进程使用完资源后 'A' 它将计数器 (semafore) 减 1,从而允许其他进程使用该资源。

by accessing to resource 'B' mutual excluding is necessary

这里一个合适的解决方案是mutex(或二进制信号量)。它们的工作原理几乎相同——区别在于 mutex 强调 欠资源