读和写一般是怎么处理比较妥呢???
现在做一个监控系统,需要读(采集下位机的数据)也需要写(通过触摸屏设置参数)。 这读和写一般是怎么处理比较好?我想一个线程里面一直循环读和写。另外一个线程处理读和写的标志位。 不知道有没有更好的办法???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
现在做一个监控系统,需要读(采集下位机的数据)也需要写(通过触摸屏设置参数)。 这读和写一般是怎么处理比较好?我想一个线程里面一直循环读和写。另外一个线程处理读和写的标志位。 不知道有没有更好的办法???
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
一个全局锁用于 每次操作为串行
TYPE_BLOCK
一个读锁,一个读增量
TYPE_RLOCK
++r_lock;
一个写锁
TYPE_WLOCK
先使用全局锁或者使用原子锁取得CPU唯一执行权限,对数据锁位进行读写锁,读锁并增加读增量,释放全局锁或原子锁
读加锁:如果数据写锁标志有效,直接返回失败。 否则,自增读增量,防止读锁
读去锁:判断读增量个数,为0直接去掉读锁标志。 如果不为0 自减读增量,判断读增量是否为0,为0去掉读锁标志。
写加锁:判断写锁标志是否存在,存在返回失败。不存在,取得全局锁或原子锁,置放写锁标志,释放全局锁或原子锁,判断读锁标志是否存在,存在循环等待,并判断读增量是否等于0,如果等于0,去掉读锁标志,退出循环。最好加个超时等待。或者不采用循环等待,有读锁标志的时候直接返回失败!
细节部分自己去调整
复制代码
谢谢LS。研究中---
忘了说 这个锁的调用是先进后出 后进先出原则
而且临界区未保护,可能有执行上的问题,你调整代码吧