-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Description
Might as well file this one too. This first came up in #486 which (naturally) isn't getting a lot of love over on User Voice. Besides PA, the construct also rears its head in a large popular software package here. Turns out that lock_impl_posix.cc ends up in a library that is in turn used by the gn meta build system. Which, if you close your eyes, you could frame as a CLI development use case.
Build 14905 fails with: pthread_mutexattr_init: Operation not supported. I made some minor mods from the original so it compiles cleanly.
gcc -o mutex_priority mutex_priority.c -pthread
/********************************************************
* An example source module to accompany...
*
* "Using POSIX Threads: Programming with Pthreads"
* by Brad nichols, Dick Buttlar, Jackie Farrell
* O'Reilly & Associates, Inc.
*
********************************************************
* mutex_priority.c
*/
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <sched.h>
#include <unistd.h>
#include <stdio.h>
#ifndef _POSIX_THREAD_PRIO_INHERIT
#error "This system does not support priority inherit protection in mutex"
#endif
pthread_mutex_t m1;
pthread_mutexattr_t mutexattr_prioinherit;
extern int
main(void)
{
int rtn;
int mutex_protocol;
/* What is the default protocol on the host? */
if ((rtn = pthread_mutexattr_init(&mutexattr_prioinherit)) != 0)
fprintf(stderr,"pthread_mutexattr_init: %s",strerror(rtn)),exit(1);
if ((rtn = pthread_mutexattr_getprotocol(
&mutexattr_prioinherit, &mutex_protocol)) != 0)
fprintf(stderr,"pthread_mutexattr_getprotocol: %s",strerror(rtn)),exit(1);
if (mutex_protocol == PTHREAD_PRIO_PROTECT)
printf("Default mutex protocol is PTHREAD_PRIO_PROTECT\n");
else if (mutex_protocol == PTHREAD_PRIO_INHERIT)
printf("Default mutex protocol is PTHREAD_PRIO_INHERIT\n");
else if (mutex_protocol == PTHREAD_PRIO_NONE)
printf("Default mutex protocol is PTHREAD_PRIO_NONE\n");
else
printf("Default mutex protocol is unrecognized\n");
/* Set this mutex attribute to INHERIT */
if ((rtn = pthread_mutexattr_setprotocol(
&mutexattr_prioinherit, PTHREAD_PRIO_INHERIT)) != 0)
fprintf(stderr,"pthread_mutexattr_setprotocol: %s\n",strerror(rtn)),exit(1);
/* Initialize a mutex with the attribute object */
if ((rtn = pthread_mutex_init(&m1,&mutexattr_prioinherit)) != 0)
fprintf(stderr,"pthread_mutexattr_init: %s\n",strerror(rtn)),exit(1);
if ((rtn = pthread_mutex_lock(&m1)) != 0)
fprintf(stderr,"pthread_mutex_lock: %s\n",strerror(rtn)),exit(1);
if ((rtn = pthread_mutex_unlock(&m1)) != 0)
fprintf(stderr,"pthread_mutex_unlock: %s\n",strerror(rtn)),exit(1);
return 0;
}
fpqc, trzecieu, arcanis, Yukaii, kfarwell and 2 more
Metadata
Metadata
Assignees
Labels
No labels