sem_mode(3C)
sem_mode - set the operation mode of a POSIX unnamed semaphore
As shipped in IRIX 6.5.15. Last changed in IRIX 6.5.15.
NAME sem_mode - set the operation mode of a POSIX unnamed semaphore C SYNOPSIS #include <semaphore.h> int sem_mode (sem_t *sem, int cmd[, arg]); DESCRIPTION sem_mode is used to change the operation mode of the specified POSIX unnamed semaphore sem. Changing a semaphore's default operation mode allows applications to enable two levels of debug tracing, and apply retry spinning. Semaphore types other than POSIX unnamed semaphores are not supported by this function. sem_mode is an IRIX extension to the POSIX interfaces and is not part of the IEEE 1003.1b Standard. The operation mode is selected by setting cmd to one of the following: SEM_MODE_TRACEINIT Initialize statistical tracing for sem, passing a pointer to a user-allocated trace structure of type sem_trace_t as arg. When debug or meter tracing is enabled, the collected data is stored in the trace structure. Upon initialization, the contents of the structure is cleared. The trace structure must reside in memory accessible to all threads/processes accessing sem, to allow them to update the traced data. If the semaphore is being shared across process boundarys, the trace structure must be located at the same virtual address for all processes. The application may access the contents of the trace structure at any time. Note: Tracing is not supported for non-shared unnamed semaphores, used by pthread applications. SEM_MODE_METERON Enable metered tracing for sem. Once a trace structure for sem has been initialized, metered tracing can be enabled. Enabling this level of tracing causes metered information to be accumulated and stored in the following trace structure fields (as operations occur): sem_waits: number of sem_wait operations sem_waithits: number of times a thread/process called sem_wait without having to block sem_posts: number of sem_post operations sem_posthits: number of times a thread/process called sem_post without having to wakeup a waiting thread/process sem_waiters: number of threads/processes currently waiting on the semaphore sem_maxwaiters: maximum number of threads/processes that can block on a semaphore at any given time SEM_MODE_METEROFF Disable metered tracing for sem, leaving the contents of the trace structure intact for future analysis. SEM_MODE_METERRESET Clear the metered contents of the trace structure of semaphore sem. SEM_MODE_DEBUGON Enable debug tracing for sem. Once a trace structure for sem has been initialized, debug tracing can be enabled. Enabling this level of tracing causes ownership and access information to be tracked and stored in the following trace structure fields: sem_owner_pid: process ID of the semaphore's current owner sem_owner_tid: pthread ID of the semaphore's current owner sem_owner_pc: program counter of the semaphore owner sem_last_pid: process ID of the last process to perform a semaphore operation on sem sem_last_tid: pthread ID of the last pthread to perform a semaphore operation on sem sem_last_pc: program counter of the last thread/process to to perform a semaphore operation on sem SEM_MODE_DEBUGOFF Disable debug tracing for sem, leaving the contents of the trace structure intact for future analysis. SEM_MODE_DEBUGRESET Clear the debug ownership contents of the trace structure of semaphore sem. SEM_MODE_SPINSET Apply a retry count arg to hold-off blocking in sem_wait(3C) when the semaphore sem is not immediately available. The default POSIX semaphore sem_wait algorithm attempts to acquire a semaphore once, and blocks the caller if the semaphore isn't available. Applying a retry count causes sem_wait to retry semaphore acquisition arg times (spinning) before blocking. Retry counts remain in effect until the application again sets the retry count to 0. Note: This operation mode is ignored on uni-processor systems. sem_mode will fail if the following is true: [EINVAL] Invalid parameter. SEE ALSO sem_init(3C), sem_post(3C), sem_wait(3C), sem_print(3C) DIAGNOSTICS Upon successful completion, a value of 0 is returned to the calling process. Otherwise, a value of -1 is returned and errno is set to indicate the error.