<< 向前        下一页 >>

ID : 5034

Mutex对象

Mutex对象指用于任务之间排斥控制的对象。

Mutex对象包括“Locked”和“Unlocked”两种状态。初始值为“Unlocked”状态。任一任务均可由“Unlocked”状态变为“Locked”状态。但是,仅“Locked”状态下的任务可由“Locked”变为“Unlocked”状态。

"TakeMutex”语句使Mutex对象由“Unlocked”状态变为“Locked”状态。指定的Mutex对象由其它任务变为“Locked”状态时,等待直至变为“Unlocked”状态。通过该功能进行任务排斥处理。

排斥处理流程

1 创建Mutex对象

执行CreateMutex以创建Mutex对象。指定Mutex对象的名称。此时,如果已由其它任务创建了相同名称的Mutex对象,则不创建新的Mutex对象,而是返回现有的对象ID,在对象中登录任务的参照。

可在项目内创建多个Mutex对象,通过名称和ID进行识别。最多可同时创建64个Mutex对象。即使每次使用相同的名称创建,也将发行不同的ID。

创建Mutex对象时(执行CreateMutex时)将名称作为对象的识别,用户可任意命名。可通过255字节以内的字符串型数据命名,由于通过比较字符串以判断识别,因此如果大写字母/小写字母及空格等不完全一致,则将识别为其它对象。

2 排斥处理

通过“TakeMutex”和“GiveMutex”圈起需要进行各任务排斥处理的处理(程序编码)。首先仅可进行“TakeMutex”执行的任务的处理,由于其它任务的Mutex对象为“Locked”状态,因此等待直至通过执行“TakeMutex”使Mutex对象变为“Unlocked”。

首先如果使Mutex对象变为“Locked”状态的任务执行“GiveMutex”,则Mutex对象变为“Unlocked”,执行等待的其它任务的“TakeMutex”。

3 取消Mutex对象

需要结束任务排斥处理时执行“DeleteMutex”,向系统发出请求取消Mutex对象。如果没有其它参照,则将取消Mutex对象。另外,任务结束时会自动请求取消Mutex对象。

Mutex对象中登录了参照的任务全部消失时Mutex对象消失。

仅进行CreateMutex(登录参照)的Mutex对象的任务可请求取消(DeleteMutex)此Mutex对象。

Mutex对象的状态

Mutex对象具有表示错误状态的属性。

处于“Locked”状态的任务在此状态下直接停止,任务取消时等情况下Mutex对象变为错误状态,同时,在“Unlock”状态下错误的任务取消参照。

然后,如果其它任务要使错误状态的Mutex对象变为“Locked”状态(TakeMutex),则任务错误。通过错误处理程序执行“ResetMutex”,解除Mutex对象的错误状态。"参照“排他处理的程序示例3”。

排他处理的程序示例

排他处理的程序示例1
一般任务间的排斥处理示例。按照Pro1-> Pro2-> Pro3的顺序执行。
排他处理的程序示例2
意识到Mutex对象存在期间任务之间的排斥处理示例。按照Pro1-> Pro2-> Pro3的顺序执行。Mutex对象存在期间依存于Pro1。
排他处理的程序示例3
因错误中断排斥处理时的处理示例。按照顺序执行Pro1-> Pro2,通常进行排斥处理使I1、I2、I3成为连续数。发生错误时,通过复位处理应对不匹配状态。

ID : 5034

<< 向前        下一页 >>