打印
[应用相关]

在C中如何实现互斥访问

[复制链接]
3878|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hwzhounan|  楼主 | 2009-5-20 16:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
“Cortex-M3权威指南”中CH5说到了“互斥访问”,也用“LDREX/STREX”举例说明了,请问如何在C语言中实现这种互斥访问呢?
沙发
香水城| | 2009-5-20 17:02 | 只看该作者

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

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

使用特权

评论回复
板凳
dengting| | 2009-5-20 17:30 | 只看该作者

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

先实现多任务操作系统,呵呵

使用特权

评论回复
地板
香水城| | 2009-5-21 10:35 | 只看该作者

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

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

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

使用特权

评论回复
5
dengting| | 2009-5-21 12:29 | 只看该作者

香主说的是!

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

使用特权

评论回复
6
汉之云| | 2009-5-22 15:43 | 只看该作者

可以考虑用BIT_banding

bit banding 是把读-修改-写包在一起了,
纯c操作,方便

使用特权

评论回复
7
lonely8122| | 2009-5-22 18:33 | 只看该作者

互斥

C语言中常用的互斥访问方法:
1.关中断
2.通过测试标志来访问互斥资源
3.使用信号量

使用特权

评论回复
8
xlsbz| | 2010-6-14 18:49 | 只看该作者
l          关中断

l          使用测试并置位指令

l          禁止做任务切换

l          利用信号量

使用特权

评论回复
9
HSunrays| | 2010-6-15 18:26 | 只看该作者
Keil RealView中的指令内在函数可直接实现“LDREX/STREX”的,附件《4.7 指令内在函数》之__ldrex()/__strex即实现该指令。

编译器参考指南.pdf

2.05 MB

使用特权

评论回复
10
秋天落叶| | 2010-6-16 19:21 | 只看该作者
关中断是很必要的

使用特权

评论回复
11
pkat| | 2010-6-16 19:25 | 只看该作者
互斥访问这个词平时也很少听到,不知道是用在什么条件下的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝