非父母子女Linux中的进程间通信

时间:2017-12-04 07:23:02

标签: c++ linux

所有

我正在开发一个Linux多进程应用程序,它在运行和寻找同步其进程的方式时没有父子关系。

我尝试过pthread信号量,但遇到了一个问题。 在某些进程递增信号量的值并立即完成其执行之后,信号量的值不会被重置,而没有进程保持信号量。 因此,在下一次执行时,程序会等待信号量永远为0并且不会有进展。

因此,POSIX信号量很容易中止。 System V也有同样的问题。

这是我检查问题的代码。

#include <fcntl.h>           /* For O_* constants */
#include <sys/stat.h>        /* For mode constants */
#include <semaphore.h>
#include <unistd.h>

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

namespace
{
    void run(void)
    {
        sem_t *s;
        s = sem_open("/sem", O_CREAT, 0666, 1);
        if(!s){
            perror("On opening semaphore");
            return;
        }

        cout << "wait lock" << endl;
        sem_wait(s);
        cout << "aquired lock" << endl;
        sleep(5);
        sem_post(s);
        cout << "released lock" << endl;

        sem_close(s);
    }
}

int main(void)
{
    run();

    return 0;
}

任何人都可以告诉我一种在中止后同步进程的替代方法。

谢谢,

0 个答案:

没有答案