所有
我正在开发一个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;
}
任何人都可以告诉我一种在中止后同步进程的替代方法。
谢谢,