本帖最后由 gowow 于 2016-11-18 17:18 编辑
请教一下,如果有多个sem,ldrex的标记是否只能有一个?
如果只有一个标记,那是否会有以下问题?
taskA使用ldrex标记了semA,还未使用strex占用semA
但此时taskB使用ldrex标记了semB
这时semA的标记是不是就没了? 后面taskA去用strex去占用semA,因为semA的标记没了而失败?-----------------------------------------
看见了这个说明,看来多信号量是没法使用了。
一个用于解决多task互锁的指令,居然自己本身就有互锁问题。。。。。。
[size=1.1em]用法
利用 LDREX 和 STREX 可在多个处理器和共享内存系统之前实现进程间通信。 出于性能方面的考虑,请将相应 LDREX 指令和 STREX 指令间的指令数控制到最少。 NoteSTREX 指令中所用的地址必须要与近期执行次数最多的 LDREX 指令所用的地址相同。 如果使用不同的地址,则 STREX 指令的执行结果将不可预知。
|