static int child (char *shm) { // Both semaphores are initially created with a count of 0, i.e., // they are "locked." ACE_SV_Semaphore_Complex mutex (SEM_KEY_1, ACE_SV_Semaphore_Complex::ACE_CREATE, 0); ACE_SV_Semaphore_Complex synch (SEM_KEY_2, ACE_SV_Semaphore_Complex::ACE_CREATE, 0); // Perform "busy waiting" here until we acquire the semaphore. This // isn't really a good design -- it's just to illustrate that you // can do non-blocking acquire() calls with the ACE System V // semaphore wrappers. while (mutex.tryacquire () == -1) if (errno == EAGAIN) ACE_DEBUG ((LM_DEBUG, "spinning in child!\n")); else ACE_ERROR_RETURN ((LM_ERROR, "child mutex.tryacquire"), 1); for (char *s = (char *) shm; *s != '\0'; s++) ACE_DEBUG ((LM_DEBUG, "%c", *s)); ACE_DEBUG ((LM_DEBUG, "\n")); if (synch.release () == -1) ACE_ERROR_RETURN ((LM_ERROR, "child synch.release"), 1); return 0; }
static int child (char *shm) { int result; ACE_SV_Semaphore_Complex mutex; // This semaphore is initially created with a count of 0, i.e., it // is "locked." result = mutex.open (SEM_KEY_1, ACE_SV_Semaphore_Complex::ACE_CREATE, 0); ACE_ASSERT (result != -1); ACE_SV_Semaphore_Complex synch; // This semaphore is initially created with a count of 0, i.e., it // is "locked." result = synch.open (SEM_KEY_2, ACE_SV_Semaphore_Complex::ACE_CREATE, 0); ACE_ASSERT (result != -1); // Perform "busy waiting" here until we acquire the semaphore. This // isn't really a good design -- it's just to illustrate that you // can do non-blocking acquire() calls with the ACE System V // semaphore wrappers. while ((result = mutex.tryacquire ()) == -1) if (errno == EAGAIN) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P) spinning in child!\n"))); else { ACE_ERROR ((LM_ERROR, ACE_TEXT ("(%P) child mutex.tryacquire"))); ACE_ASSERT (result != -1); } for (int i = 0; i < SHMSZ; i++) ACE_ASSERT (SHMDATA[i] == shm[i]); result = synch.release (); ACE_ASSERT (result != -1); return 0; }
static int child (char *shm) { ACE_SV_Semaphore_Complex sem (SEM_KEY, ACE_SV_Semaphore_Complex::ACE_CREATE, 0, 2); while (sem.tryacquire (0) == -1) if (errno == EAGAIN) ACE_DEBUG ((LM_DEBUG, "spinning in client!\n")); else ACE_ERROR_RETURN ((LM_ERROR, "client mutex.tryacquire(0)"), 1); for (char *s = (char *) shm; *s != '\0'; s++) ACE_DEBUG ((LM_DEBUG, "%c", *s)); ACE_DEBUG ((LM_DEBUG, "\n")); if (sem.release (1) < 0) ACE_ERROR ((LM_ERROR, "client sem.release(1)")); return 0; }