[NPTL docs] pthread robustness and pthread_mutex_consistent
Yubin Ruan
ablacktshirt@gmail.com
Mon Aug 7 07:03:00 GMT 2017
2017-08-07 12:06 GMT+08:00 Yubin Ruan <ablacktshirt@gmail.com>:
> Hi,
>
> where can I find some docs of the NPTL lib on Linux? I am writing some
> application with pthread, but not so sure what exactly
> "pthread_mutex_consistent/pthread_mutex_consistent_np" does. I know
> POSIX has their standard on this, but I am not so sure how will
> Linux's implementation differ from that.
>
> Currently I have a system, in which multiple threads are running and
> try to lock/unlock to synchronize when they try to read/write a memory
> area. However some threads might die inadvertently with the lock hold,
> making the whole system deadlocked. So it would be great if I can make
> sure that if a thread die, all the locks it held will be released.
>
> Here is a naive example to show what I mean:
>
> #include <stdio.h>
> #include <unistd.h>
> #include <pthread.h>
>
> pthread_mutex_t lock;
>
> void dropped_thread(void)
> {
> printf("Setting lock...\n");
> pthread_mutex_lock(&lock);
> printf("Lock set, now exiting without unlocking...\n");
> pthread_exit(NULL);
> }
>
> int main(int argc, char *argv[])
> {
> pthread_t lock_getter;
> pthread_mutexattr_t attr;
> pthread_mutexattr_init(&attr);
> pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
Just realize that I forget to initialize the lock:
+ pthread_mutex_init(&lock, &attr);
> pthread_create(&lock_getter, NULL, (void *) dropped_thread, NULL);
> sleep(2);
>
> printf("Inside main\n");
> printf("Attempting to acquire unlocked mutex?\n");
>
> pthread_mutex_consistent(&lock);
> pthread_mutex_unlock(&lock);
> pthread_mutex_lock(&lock);
>
> printf("Successfully acquired lock!\n");
>
> return 0;
>
> }
>
> My question is:
> * how can I check whether a mutex is consistent (i.e., a thread die
> with the mutex hold). Can I do this with only `pthread_mutex_lock()'
> (i.e., when a thread die, another thread trying to lock it with
> pthread_mutex_lock will automatically succeed, probably with some
> error code returned)
After some investigation I think pthread_mutex_lock is sufficient for this
Please correct me if I am wrong.
> * can I do the check in any thread? Some people says that it is only
> possible to do this in the main thread.
>
> And, the maybe the last ultimate question: what does "np" means in
> `pthread_mutex_consistent_np'? Native Posix as in NPTL? What is the
> difference between a "np" and a "non-np" implementation?
>
> Many thanks!
> Yubin
More information about the Libc-help
mailing list