⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cma_mutex.h

📁 这个是LINUX下的GDB调度工具的源码
💻 H
字号:
/*  * (c) Copyright 1990-1996 OPEN SOFTWARE FOUNDATION, INC. * (c) Copyright 1990-1996 HEWLETT-PACKARD COMPANY * (c) Copyright 1990-1996 DIGITAL EQUIPMENT CORPORATION * (c) Copyright 1991, 1992 Siemens-Nixdorf Information Systems * To anyone who acknowledges that this file is provided "AS IS" without * any express or implied warranty: permission to use, copy, modify, and * distribute this file for any purpose is hereby granted without fee, * provided that the above copyright notices and this notice appears in * all source code copies, and that none of the names listed above be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission.  None of these organizations * makes any representations about the suitability of this software for * any purpose. *//* *	Header file for mutex operations */#ifndef CMA_MUTEX#define CMA_MUTEX/* *  INCLUDE FILES */#include <cma.h>#include <cma_attr.h>#include <cma_defs.h>#include <cma_semaphore_defs.h>#include <cma_sequence.h>#include <cma_tcb_defs.h>#include <cma_stack.h>/* * CONSTANTS AND MACROS *//* * TYPEDEFS */typedef struct CMA__T_INT_MUTEX {    cma__t_object	header;		/* Common header (sequence, type) */    cma__t_int_attr	*attributes;	/* Back link */    cma__t_int_tcb	*owner;		/* Current owner (if any) */    cma_t_integer	nest_count;	/* Nesting level for recursive mutex */    cma__t_atomic_bit	*unlock;	/* Pointer used for unlock operation */    cma__t_atomic_bit	lock;		/* Set if currently locked */    struct CMA__T_INT_MUTEX *int_lock;	/* Internal protection for mutex */    cma__t_atomic_bit	event;		/* Clear when unlock requires action */    cma__t_atomic_bit	waiters;	/* Clear when threads are waiting */    cma__t_atomic_bit	bitbucket;	/* Fake bit to keep friendlies locked */    cma_t_mutex_kind	mutex_kind;	/* Kind of mutex */    cma__t_semaphore	semaphore;	/* Semaphore for low-level wait */    } cma__t_int_mutex;/* *  FUNCTIONAL DESCRIPTION: * *	Lock a mutex (internal) * *  FORMAL PARAMETERS: * *	mutex		Pointer to mutex object to lock * *  IMPLICIT INPUTS: * *	none * *  IMPLICIT OUTPUTS: * *	none * *  FUNCTION VALUE: * *	none * *  SIDE EFFECTS: * *	none */#ifdef NDEBUG# define cma__int_lock(mutex) { \    if (cma__test_and_set (&((cma__t_int_mutex *)mutex)->lock)) { \	cma_t_status	res;\	res = cma__int_mutex_block ((cma__t_int_mutex *)mutex); \	if (res != cma_s_normal) cma__error (res); \	} \    }#else# define cma__int_lock(mutex) { \    cma__t_int_tcb *__ltcb__; \    __ltcb__ = cma__get_self_tcb (); \    if (cma__test_and_set (&((cma__t_int_mutex *)mutex)->lock)) { \	cma_t_status	res;\	res = cma__int_mutex_block ((cma__t_int_mutex *)mutex); \	if (res != cma_s_normal) cma__error (res); \	} \    ((cma__t_int_mutex *)mutex)->owner = __ltcb__; \    }#endif/* *  FUNCTIONAL DESCRIPTION: * *	Unlock a mutex (internal) * *  FORMAL PARAMETERS: * *	mutex		Pointer to mutex object to unlock * *  IMPLICIT INPUTS: * *	none * *  IMPLICIT OUTPUTS: * *	none * *  FUNCTION VALUE: * *	none * *  SIDE EFFECTS: * *	none */#ifdef NDEBUG# define cma__int_unlock(mutex) { \    cma__unset (((cma__t_int_mutex *)mutex)->unlock); \    if (!cma__test_and_set (&((cma__t_int_mutex *)mutex)->event)) { \	cma_t_status	res;\	res = cma__int_mutex_unblock ((cma__t_int_mutex *)mutex); \	if (res != cma_s_normal) cma__error (res); \	} \    }#else# define cma__int_unlock(mutex) { \    cma__t_int_tcb	*__utcb__; \    __utcb__ = cma__get_self_tcb (); \    if (((cma__t_int_mutex *)mutex)->mutex_kind == cma_c_mutex_fast) { \	cma__assert_warn ( \		(__utcb__ == ((cma__t_int_mutex *)mutex)->owner), \		"attempt to release mutx owned by another thread"); \	((cma__t_int_mutex *)mutex)->owner = (cma__t_int_tcb *)cma_c_null_ptr; \	} \    cma__unset (((cma__t_int_mutex *)mutex)->unlock); \    if (!cma__test_and_set (&((cma__t_int_mutex *)mutex)->event)) { \	cma_t_status	res;\	res = cma__int_mutex_unblock ((cma__t_int_mutex *)mutex); \	if (res != cma_s_normal) cma__error (res); \	} \    }#endif/* *  FUNCTIONAL DESCRIPTION: * *	cma__int_mutex_delete - Performs work for cma_mutex_delete * *  FORMAL PARAMETERS: * *	cma__t_mutex	    _mutex_	- Mutex to be deleted * *  IMPLICIT INPUTS: * *	none * *  IMPLICIT OUTPUTS: * *	none * *  FUNCTION VALUE: * *	none * *  SIDE EFFECTS: * *	none */#define cma__int_mutex_delete(_mutex_) { \    cma__t_int_mutex    *_int_mutex_; \    _int_mutex_ = cma__validate_null_mutex (_mutex_); \    if (_int_mutex_ == (cma__t_int_mutex *)cma_c_null_ptr) \        return; \    if (cma__int_mutex_locked (_int_mutex_)) \        cma__error (cma_s_in_use); \    cma__free_mutex (_int_mutex_); \    cma__clear_handle (_mutex_); \    }/* *  GLOBAL DATA */extern cma__t_sequence	cma__g_mutex_seq;extern cma__t_int_mutex	*cma__g_global_lock;/* * INTERNAL INTERFACES */extern void cma__destroy_mutex  (cma__t_int_mutex *);extern void cma__free_mutex  (cma__t_int_mutex *);extern void cma__free_mutex_nolock  (cma__t_int_mutex *);extern cma__t_int_mutex * cma__get_first_mutex  (cma__t_int_attr *);extern cma__t_int_mutex * cma__get_mutex  (cma__t_int_attr *);extern void cma__init_mutex  (void);extern cma_t_status cma__int_mutex_block  (cma__t_int_mutex *);extern cma_t_boolean cma__int_mutex_locked  (cma__t_int_mutex *);extern cma_t_boolean cma__int_try_lock  (cma__t_int_mutex *);extern cma_t_status cma__int_mutex_unblock  (cma__t_int_mutex *);extern cma_t_boolean cma__mutex_locked  (cma_t_mutex);extern void cma__reinit_mutex  (cma_t_integer);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -