mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-03-13 00:10:35 -07:00
multiprocessing: add predicate "mp:holding-lock-p"
This predicate returns T if lock is hold by the process and NIL if it is hold by another process or is released.
This commit is contained in:
parent
69a28761d9
commit
0badafcd35
4 changed files with 13 additions and 0 deletions
|
|
@ -1550,6 +1550,7 @@ cl_symbols[] = {
|
|||
{MP_ "MAKE-LOCK", MP_ORDINARY, IF_MP(mp_make_lock), -1, OBJNULL},
|
||||
{KEY_ "RECURSIVE", KEYWORD, NULL, -1, OBJNULL},
|
||||
{MP_ "RECURSIVE-LOCK-P", MP_ORDINARY, IF_MP(mp_recursive_lock_p), 1, OBJNULL},
|
||||
{MP_ "HOLDING-LOCK-P", MP_ORDINARY, IF_MP(mp_holding_lock_p), 1, OBJNULL},
|
||||
{MP_ "LOCK-NAME", MP_ORDINARY, IF_MP(mp_lock_name), 1, OBJNULL},
|
||||
{MP_ "LOCK-OWNER", MP_ORDINARY, IF_MP(mp_lock_owner), 1, OBJNULL},
|
||||
{MP_ "LOCK-COUNT", MP_ORDINARY, IF_MP(mp_lock_count), 1, OBJNULL},
|
||||
|
|
|
|||
|
|
@ -1550,6 +1550,7 @@ cl_symbols[] = {
|
|||
{MP_ "MAKE-LOCK",IF_MP("mp_make_lock")},
|
||||
{KEY_ "RECURSIVE",NULL},
|
||||
{MP_ "RECURSIVE-LOCK-P",IF_MP("mp_recursive_lock_p")},
|
||||
{MP_ "HOLDING-LOCK-P",IF_MP("mp_holding_lock_p")},
|
||||
{MP_ "LOCK-NAME",IF_MP("mp_lock_name")},
|
||||
{MP_ "LOCK-OWNER",IF_MP("mp_lock_owner")},
|
||||
{MP_ "LOCK-COUNT",IF_MP("mp_lock_count")},
|
||||
|
|
|
|||
|
|
@ -67,6 +67,16 @@ mp_recursive_lock_p(cl_object lock)
|
|||
ecl_return1(env, lock->lock.recursive? ECL_T : ECL_NIL);
|
||||
}
|
||||
|
||||
cl_object
|
||||
mp_holding_lock_p(cl_object lock)
|
||||
{
|
||||
cl_env_ptr env = ecl_process_env();
|
||||
cl_object own_process = env->own_process;
|
||||
unlikely_if (ecl_t_of(lock) != t_lock)
|
||||
FEerror_not_a_lock(lock);
|
||||
ecl_return1(env, (lock->lock.owner == own_process) ? ECL_T : ECL_NIL);
|
||||
}
|
||||
|
||||
cl_object
|
||||
mp_lock_name(cl_object lock)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1776,6 +1776,7 @@ extern ECL_API cl_index ecl_atomic_index_incf(cl_index *slot);
|
|||
|
||||
extern ECL_API cl_object mp_make_lock _ECL_ARGS((cl_narg narg, ...));
|
||||
extern ECL_API cl_object mp_recursive_lock_p(cl_object lock);
|
||||
extern ECL_API cl_object mp_holding_lock_p(cl_object lock);
|
||||
extern ECL_API cl_object mp_lock_name(cl_object lock);
|
||||
extern ECL_API cl_object mp_lock_owner(cl_object lock);
|
||||
extern ECL_API cl_object mp_lock_count(cl_object lock);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue