/** * @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; } }