create_mutexT_create_mutexCreateMutexCreateMutexcreate_mutex创建互斥锁(算子)
名称
create_mutexT_create_mutexCreateMutexCreateMutexcreate_mutex — 创建一个互斥同步对象。
签名
void CreateMutex(const HTuple& AttribName, const HTuple& AttribValue, HTuple* MutexHandle)
void HMutex::HMutex(const HTuple& AttribName, const HTuple& AttribValue)
void HMutex::HMutex(const HString& AttribName, const HString& AttribValue)
void HMutex::HMutex(const char* AttribName, const char* AttribValue)
void HMutex::HMutex(const wchar_t* AttribName, const wchar_t* AttribValue)
(
Windows only)
void HMutex::CreateMutex(const HTuple& AttribName, const HTuple& AttribValue)
void HMutex::CreateMutex(const HString& AttribName, const HString& AttribValue)
void HMutex::CreateMutex(const char* AttribName, const char* AttribValue)
void HMutex::CreateMutex(const wchar_t* AttribName, const wchar_t* AttribValue)
(
Windows only)
def create_mutex(attrib_name: MaybeSequence[Union[int, float, str]], attrib_value: MaybeSequence[Union[int, float, str]]) -> HHandle
描述
互斥锁是一种同步对象,用于在单个进程的线程之间协商互斥机制,以避免对全局变量等公共资源的并发修改。互斥锁有两种可能状态:解锁状态(即未被任何线程持有)和锁定状态(即被某个特定线程持有)。当线程尝试锁定已被其他线程占有的互斥锁时,需等待持有线程先释放锁定。与事件不同,线程必须持有互斥锁才能解锁。
create_mutexcreate_mutexCreateMutexCreateMutexCreateMutexcreate_mutex 根据 AttribNameAttribNameAttribNameAttribNameattribNameattrib_name 和 AttribValueAttribValueAttribValueAttribValueattribValueattrib_value 指定的属性分配并初始化互斥锁对象。AttribNameAttribNameAttribNameAttribNameattribNameattrib_name 指定属性类,AttribValueAttribValueAttribValueAttribValueattribValueattrib_value
指定互斥锁类型。下文描述了各属性类支持的互斥类型:
- ''""""""""""
空字符串设置默认属性。
- 'type'"type""type""type""type""type"
-
指定线程尝试锁定已被占有的互斥锁时发生的行为:
- 'sleep'"sleep""sleep""sleep""sleep""sleep"
仅挂起调用线程(默认)。若该线程已是互斥锁持有者,则行为未定义。
- 'spin'"spin""spin""spin""spin""spin"
-
一种快速互斥锁实现,该实现会忙等待被触发的互斥锁。若线程已是该互斥锁的持有者,则行为未定义。
- 'recursive'"recursive""recursive""recursive""recursive""recursive"
-
若调用线程并非互斥锁的持有者,则该线程将被挂起。但递归互斥锁可被持有者线程再次获取。递归互斥锁仅在解锁请求次数等于成功锁定请求次数时才会解锁。
互斥锁创建时即处于解锁状态。
执行信息
- 多线程类型:独立(即使使用独占算子也能并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 未采用并行化处理。
参数
AttribNameAttribNameAttribNameAttribNameattribNameattrib_name (输入控制) number(-array) → HTupleMaybeSequence[Union[int, float, str]]HTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)
互斥锁属性类。
默认值:
[]
值列表:
'type'"type""type""type""type""type"
AttribValueAttribValueAttribValueAttribValueattribValueattrib_value (输入控制) number(-array) → HTupleMaybeSequence[Union[int, float, str]]HTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)
互斥锁属性类型。
元素数量:
AttribValue == AttribName
默认值:
[]
值列表:
'recursive'"recursive""recursive""recursive""recursive""recursive", 'sleep'"sleep""sleep""sleep""sleep""sleep", 'spin'"spin""spin""spin""spin""spin"
MutexHandleMutexHandleMutexHandleMutexHandlemutexHandlemutex_handle (输出控制) mutex → HMutex, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
互斥锁同步对象。
结果
create_mutexcreate_mutexCreateMutexCreateMutexCreateMutexcreate_mutex 在所有参数正确时返回 2 (H_MSG_TRUE)。如有必要,则抛出异常。
可能的后继
lock_mutexlock_mutexLockMutexLockMutexLockMutexlock_mutex,
clear_mutexclear_mutexClearMutexClearMutexClearMutexclear_mutex
另见
clear_mutexclear_mutexClearMutexClearMutexClearMutexclear_mutex
模块
基础