硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4851|回复: 1
收起左侧

[QQ群问题解答] 调度关了以后,信号还能等待吗?

[复制链接]

92

主题

76

回帖

92

积分

初级会员

积分
92
发表于 2014-4-2 11:01:19 | 显示全部楼层 |阅读模式
最近看了一些OS的PIPE的驱动,都有类似写法:

  semaphore_wait (pipe->lock);//互斥上锁

/*查看有没有足够数据*/
     while ((pipe->total_data - handle->position) < size)
    {
      task_lock();/*调度关*/

      pipe->readers_waiting++;

      semaphore_signal (pipe->lock);/*解开互斥锁*/

      semaphore_wait (pipe->reader_sem);/*等候WRITER发来的写信号*/

      semaphore_wait (pipe->lock););//重新上锁

      task_unlock();/*调度开*/

    }

//如果数据足够,直接拷贝到BUFFER
  copy_data_to_user();

semaphore_signal (pipe->lock);//解开锁

不明白为什么关了调度以后还能等待,即使semaphore_wait (pipe->reader_sem)在关调度期间,并没有真正的切换到其他线程,但是 semaphore_signal (pipe->lock);/*解开互斥锁*/

      semaphore_wait (pipe->reader_sem);/*等候WRITER发来的写信号*/

      semaphore_wait (pipe->lock););//重新上锁
不明白这一解开和一枷锁有什么意义,而且似乎永远抢占了互斥锁,其他线程能得到锁吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2014-4-3 19:58:46 | 显示全部楼层
这个我也不太理解,后面有时间再研究下。
不过你说的这种情况可以通过中断函数post消息过来。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 23:56 , Processed in 0.145245 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表