Newer
Older
c-interpreter / modules / libkc / src / kc_lock_guard.c
Nomura Kei on 9 Aug 2023 1 KB UPDATE
/**
 * @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;
	}
}