Standards / Extensions | C or C++ | Dependencies |
---|---|---|
z/OS® UNIX | both | POSIX(ON) |
#define _OPEN_THREADS
#define _OPEN_SYS
#include <pthread.h>
int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);
Sets the attribute kind for the mutex attribute object attr. With a mutex attribute object, you can manage the characteristics of mutexes in your application. It defines the set of values to be used for the mutex during its creation. By establishing a mutex attribute object, you can create many mutexes with the same set of characteristics, without defining those characteristics for each and every mutex.
If successful, pthread_mutexattr_setkind_np() returns 0.
⁄* CELEBP45 *⁄
#pragma runopts(TEST(ALL))
#ifndef _OPEN_THREADS
#define _OPEN_THREADS
#define _OPEN_SYS ⁄* Needed to identify __MUTEX_NODEBUG *⁄
#endif
#include <stdio.h>
#include <pthread.h>
pthread_mutexattr_t attr;
int kind;
main() {
if (pthread_mutexattr_init(&attr) == -1) {
perror("pthread_mutexattr_init()");
exit(1);
}
if (pthread_mutexattr_setkind_np(&attr, \
__MUTEX_RECURSIVE + __MUTEX_NODEBUG) == -1 ) {
perror("pthread_mutexattr_setkind_np()");
exit(1);
}
if (pthread_mutexattr_getkind_np(&attr, &kind) == -1) {
perror("pthread_mutexattr_getkind_np()");
exit(1);
}
switch(kind) {
case __MUTEX_NONRECURSIVE:
printf("\nmutex will be nonrecursive");
break;
case __MUTEX_NONRECURSIVE+__MUTEX_NODEBUG:
printf("\nmutex will be nonrecursive + nodebug");
break;
case __MUTEX_RECURSIVE:
printf("\nmutex will be recursive");
break;
case __MUTEX_RECURSIVE+__MUTEX_NODEBUG:
printf("\nmutex will be recursive + nodebug");
break;
default:
printf("\nattribute kind value returned by \
pthread_mutexattr_getkind_np() unrecognized");
exit(1);
}
exit(0);
}