- /**
- * @file kc_lock_guard.c
- * @brief ロックガードモジュール
- */
- #include <stdio.h>
- #include <errno.h>
-
- #include <kc_lock_guard.h>
-
-
- /**
- * 指定された mutex がロックされるまで現在のスレッドをロックします。
- * ロックに成功するとロック管理用のオブジェクトを返します。
- *
- * @param mutex mutex
- * @return ロック管理用オブジェクト
- */
- KcLockGuard kc_lock_guard_init(mtx_t* mutex)
- {
- KcLockGuard guard = { .mutex = mutex };
- if (mutex == NULL)
- {
- errno = EINVAL;
- perror("kc_lock_guard_init: (mutex = NULL)");
- return guard;
- }
-
- int ret = mtx_lock(mutex);
- if (ret != thrd_success)
- {
- perror("kc_lock_guard : mtx_lock error");
- guard.mutex = NULL;
- }
- return guard;
- }
-
-
- /**
- * 指定されたロック管理用オブジェクトのロックを解除します。
- *
- * @param guard ロック管理用オブジェクト
- */
- void kc_lock_guard_release(KcLockGuard* guard)
- {
- if (guard->mutex != NULL) {
- mtx_unlock(guard->mutex);
- guard->mutex = NULL;
- }
- }
-