在C中如何实现互斥访问

zhenxining   2009-5-20 16:11 楼主
                                 “Cortex-M3权威指南”中CH5说到了“互斥访问”,也用“LDREX/STREX”举例说明了,请问如何在C语言中实现这种互斥访问呢?

回复评论 (10)

C中没有对应的语句,需要用嵌入汇编使用这些特殊指令

                                 当然不用这些特殊指令,使用纯C函数也可以实现互斥访问,一些操作系统的书中有介绍。
点赞  2009-5-20 17:02

“互斥访问”我认为,是操作系统多任务中的概念吧。

                                 先实现多任务操作系统,呵呵
点赞  2009-5-20 17:30

"互斥访问"是操作系统中要解决的问题,但不是操作系统特有

只要有中断,就会有“互斥访问”的问题。

举个简单的例子:你通过中断接收数据到一个环形缓冲区,用一个指针控制数据写入缓冲区,再在主循环中从缓冲区读取并处理数据,用另一个指针控制数据读出,如果写指针追上了读指针表示缓冲区上溢,如果读指针追上写指针表示缓冲区变空;对读写指针的控制就需要解决“互斥访问”的问题,如不解决读写指针的操作肯定会乱。
点赞  2009-5-21 10:35

香主说的是!

版主说的是!
一般的通讯,是都可以用环形缓冲解决,但要对一个资源的锁定,则无法解决,只能关中断...不知道有什么好的办法没有?
点赞  2009-5-21 12:29

可以考虑用BIT_banding

bit banding 是把读-修改-写包在一起了,
纯c操作,方便
点赞  2009-5-22 15:43

互斥

C语言中常用的互斥访问方法:
1.关中断
2.通过测试标志来访问互斥资源
3.使用信号量
点赞  2009-5-22 18:33
l          关中断

l          使用测试并置位指令

l          禁止做任务切换

l          利用信号量
点赞  2010-6-14 18:49
Keil RealView中的指令内在函数可直接实现“LDREX/STREX”的,附件《4.7 指令内在函数》之__ldrex()/__strex即实现该指令。

编译器参考指南.pdf (2.05 MB)

点赞  2010-6-15 18:26
                                 关中断是很必要的
点赞  2010-6-16 19:21
                                 互斥访问这个词平时也很少听到,不知道是用在什么条件下的
点赞  2010-6-16 19:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复