// Copyright (c) 2001 David Muse
// See the file COPYING for more information
#include <rudiments/semaphoreset.h>
#include <rudiments/file.h>
#include <rudiments/permissions.h>
#include <stdio.h>
#ifdef RUDIMENTS_NAMESPACE
using namespace rudiments;
#endif
int main(int argc, const char **argv) {
// create a file called /tmp/sem
file::remove("/tmp/sem");
file fd;
fd.create("/tmp/sem",permissions::evalPermString("rw-------"));
fd.close();
// Create a semaphore set keyed to /tmp/sem containing 2 individual
// semaphores. Initialize them to 0 and 1 respectively.
int vals[2]={0,1};
semaphoreset sem;
sem.create(file::generateKey("/tmp/sem",1),
permissions::evalPermString("rw-------"),2,vals);
// loop 10 times, printing 2 and 4, synchronizing with another process
// using the semaphores.
for (int i=0; i<10; i++) {
sem.wait(0);
printf("2\n");
sem.signal(1);
sem.wait(0);
printf("4\n");
sem.signal(1);
}
}