tzjzzpz 发表于 2010-7-5 11:20:43

调度关了以后,信号还能等待吗?

最近看了一些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]
查看完整版本: 调度关了以后,信号还能等待吗?