Linux应用程序中2个进程如何同步?

robotlee2002 2008-08-19 10:22:28
Linux应用程序中2个进程如何同步?

平台:ARM9-s3c2410
系统:嵌入式linux2.4.18

在应用程序中我创建了2个进程:

一,uard_read
线程中通过调用驱动,循环读取uart的数据(驱动中通过DMA读取数据, 速度很快)
然后将数据不断放到一个环形缓冲区(N个buf)。

二,data_break
用来解析环形缓冲区每个buf里的数据。
data_break中解析1个buf的数据的时间比uard_read中存放完1个buf数据要短很多。


希望实现:

我希望在uard_read中,读取数据存放完1个buf后,
就类似中断一个通知data_break继续执行来解析这个buf里面的数据包。
处理完后,就睡眠了。而不是循环去查询状态。


请问在linux下如何来实现上面的功能呢?

软中断能够实现吗,软中断时,软中断能够多块地响应呢?
data_break的功能就放到软中断的回调函数里面去做了。

还有别的更好的方法吗? 类似驱动开发中的通过信号量同步一样?


感谢高手指点...
...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
manio 2008-08-24
  • 打赏
  • 举报
回复
先看看进程间通信的问题.
http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/
Linux环境进程间通信
pheobe33 2008-08-24
  • 打赏
  • 举报
回复
学习
flyingship23 2008-08-24
  • 打赏
  • 举报
回复
用信号吧,uard_read存入buf,发送信号给data_break,data_break处理完buf数据,挂起,等待信号,如此这般
guolisen 2008-08-23
  • 打赏
  • 举报
回复
生产者消费者问题吧 信号量
ling 2008-08-23
  • 打赏
  • 举报
回复
对啊 ,有两个线程做, 然后用信号阻塞,这样uard_read就会被挂起了。
pottichu 2008-08-23
  • 打赏
  • 举报
回复
http://www.ibm.com/developerworks/cn/linux/l-ipc/part4/index.html
http://topic.csdn.net/u/20071122/08/2307B159-ECCD-41E7-A671-280E250E9122.html

信号灯 确实是可以的, 不过,有点复杂, 也不太好用.

另外, 你为什么不用多线程来做, 而要用多进程?
weidong0210 2008-08-21
  • 打赏
  • 举报
回复
菜鸟飘过
zclever 2008-08-19
  • 打赏
  • 举报
回复
试试互斥mutex
unbutun 2008-08-19
  • 打赏
  • 举报
回复
可以自己写一个类似信号量的东西,建立互斥p v操作。然后调用让那个进程睡眠。



本人初学,如有不对之处,请见谅。
cceczjxy 2008-08-19
  • 打赏
  • 举报
回复
一般都是用信号量。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧