/* see file header comment */ #ifdefined(USE_NAMED_POSIX_SEMAPHORES) && defined(EXEC_BACKEND) #error cannot use named POSIX semaphores with EXEC_BACKEND #endif
/* typedef PGSemaphore is equivalent to pointer to sem_t */ typedefstruct PGSemaphoreData
{
SemTPadded sem_padded;
} PGSemaphoreData;
#define PG_SEM_REF(x) (&(x)->sem_padded.pgsem)
#define IPCProtection (0600) /* access/modify by user only */
#ifdef USE_NAMED_POSIX_SEMAPHORES static sem_t **mySemPointers; /* keep track of created semaphores */ #else static PGSemaphore sharedSemas; /* array of PGSemaphoreData in shared memory */ #endif staticint numSems; /* number of semas acquired so far */ staticint maxSems; /* allocated size of above arrays */ staticint nextSemKey; /* next name to try */
staticvoid ReleaseSemaphores(int status, Datum arg);
/* *PosixSemaphoreKill-removesasemaphore
*/ staticvoid
PosixSemaphoreKill(sem_t *sem)
{ #ifdef USE_NAMED_POSIX_SEMAPHORES /* Got to use sem_close for named semaphores */ if (sem_close(sem) < 0)
elog(LOG, "sem_close failed: %m"); #else /* Got to use sem_destroy for unnamed semaphores */ if (sem_destroy(sem) < 0)
elog(LOG, "sem_destroy failed: %m"); #endif
}
/* *Reportamountofsharedmemoryneededforsemaphores
*/
Size
PGSemaphoreShmemSize(int maxSemas)
{ #ifdef USE_NAMED_POSIX_SEMAPHORES /* No shared memory needed in this case */ return0; #else /* Need a PGSemaphoreData per semaphore */ return mul_size(maxSemas, sizeof(PGSemaphoreData)); #endif
}
/* See notes in sysv_sema.c's implementation of PGSemaphoreLock. */ do
{
errStatus = sem_wait(PG_SEM_REF(sema));
} while (errStatus < 0 && errno == EINTR);
if (errStatus < 0)
elog(FATAL, "sem_wait failed: %m");
}
/* *Note:iferrStatusis-1anderrno==EINTRthenitmeanswereturned *fromtheoperationprematurelybecauseweweresentasignal.Sowe *tryandlockthesemaphoreagain.
*/ do
{
errStatus = sem_trywait(PG_SEM_REF(sema));
} while (errStatus < 0 && errno == EINTR);
if (errStatus < 0)
{ if (errno == EAGAIN || errno == EDEADLK) returnfalse; /* failed to lock it */ /* Otherwise we got trouble */
elog(FATAL, "sem_trywait failed: %m");
}
returntrue;
}
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.14Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.