Newer
Older
libkc / modules / src / kc_lock_guard.c
  1. /**
  2. * @file kc_lock_guard.c
  3. * @brief ロックガードモジュール
  4. */
  5. #include <stdio.h>
  6. #include <errno.h>
  7.  
  8. #include <kc_lock_guard.h>
  9.  
  10.  
  11. /**
  12. * 指定された mutex がロックされるまで現在のスレッドをロックします。
  13. * ロックに成功するとロック管理用のオブジェクトを返します。
  14. *
  15. * @param mutex mutex
  16. * @return ロック管理用オブジェクト
  17. */
  18. KcLockGuard kc_lock_guard_init(mtx_t* mutex)
  19. {
  20. KcLockGuard guard = { .mutex = mutex };
  21. if (mutex == NULL)
  22. {
  23. errno = EINVAL;
  24. perror("kc_lock_guard_init: (mutex = NULL)");
  25. return guard;
  26. }
  27.  
  28. int ret = mtx_lock(mutex);
  29. if (ret != thrd_success)
  30. {
  31. perror("kc_lock_guard : mtx_lock error");
  32. guard.mutex = NULL;
  33. }
  34. return guard;
  35. }
  36.  
  37.  
  38. /**
  39. * 指定されたロック管理用オブジェクトのロックを解除します。
  40. *
  41. * @param guard ロック管理用オブジェクト
  42. */
  43. void kc_lock_guard_release(KcLockGuard* guard)
  44. {
  45. if (guard->mutex != NULL) {
  46. mtx_unlock(guard->mutex);
  47. guard->mutex = NULL;
  48. }
  49. }
  50.