📄 fastlock.c
字号:
/* *---------------------------------------------------------------------- * T-Kernel * * Copyright (C) 2004 by Ken Sakamura. All rights reserved. * T-Kernel is distributed under the T-License. *---------------------------------------------------------------------- * * Version: 1.01.00 * Released by T-Engine Forum(http://www.t-engine.org) at 2004/6/28. * *---------------------------------------------------------------------- *//* * @(#)fastlock.c (libtk) * * High-speed exclusive control lock */#include <basic.h>#include <tk/tkernel.h>#include <tk/util.h>#include <libstr.h>/* ------------------------------------------------------------------------ *//* * Inc Increment cnt, in result if cnt > 0, returns positive value. * If cnt <= 0, returns 0 or negative value. * Dec Decrement cnt, in result if cnt >= 0, returns positive value. * If cnt < 0, returns 0 or negative value. * Increment/Decrement and evaluation of the associated result must * be executed exclusively. */Inline INT Inc( FastLock *lock ){ UINT imask; INT c; DI(imask); c = ++lock->cnt; EI(imask); return c;}Inline INT Dec( FastLock *lock ){ UINT imask; INT c; DI(imask); c = lock->cnt--; EI(imask); return c;}/* ------------------------------------------------------------------------ *//* * Lock */EXPORT void Lock( FastLock *lock ){ if ( Inc(lock) > 0 ) { tk_wai_sem(lock->id, 1, TMO_FEVR); }}/* * Lock release */EXPORT void Unlock( FastLock *lock ){ if ( Dec(lock) > 0 ) { tk_sig_sem(lock->id, 1); }}/* * Create high-speed lock */EXPORT ER CreateLock( FastLock *lock, UB *name ){ T_CSEM csem; ER err; if ( name == NULL ) { csem.exinf = NULL; } else { strncpy((B*)&csem.exinf, name, sizeof(csem.exinf)); } csem.sematr = TA_TPRI | TA_NODISWAI; csem.isemcnt = 0; csem.maxsem = 1; err = tk_cre_sem(&csem); if ( err < E_OK ) return err; lock->id = err; lock->cnt = -1; return E_OK;}/* * Delete high-speed lock */EXPORT void DeleteLock( FastLock *lock ){ if ( lock->id > 0 ) { tk_del_sem(lock->id); } lock->id = 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -