pthread_mutex_robust.cpp 888 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * Copyright Andrey Semashev 2015.
  3. * Distributed under the Boost Software License, Version 1.0.
  4. * (See accompanying file LICENSE_1_0.txt or copy at
  5. * http://www.boost.org/LICENSE_1_0.txt)
  6. */
  7. #include <errno.h>
  8. #include <pthread.h>
  9. int main(int, char*[])
  10. {
  11. pthread_mutexattr_t attr;
  12. pthread_mutexattr_init(&attr);
  13. pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL);
  14. pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
  15. pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
  16. pthread_mutex_t m;
  17. pthread_mutex_init(&m, &attr);
  18. pthread_mutexattr_destroy(&attr);
  19. int err = pthread_mutex_lock(&m);
  20. if (err == EOWNERDEAD)
  21. {
  22. err = pthread_mutex_consistent(&m);
  23. }
  24. if (err != ENOTRECOVERABLE)
  25. {
  26. pthread_mutex_unlock(&m);
  27. }
  28. pthread_mutex_destroy(&m);
  29. return 0;
  30. }