首先几个 东西 :  环形缓冲区 Arr  , 配套的指针  recv ,  sendx

 

以下所有操作 均有 lock , unlock

 

write v :

  1.  读等待队列(r_wq)有元素,{

 

      弹出 r_wq 头元素S,  将 v写入S   

  }

 

  2. 可写入 缓冲区 {

    

    Arr[ sendx++] = v

  }

 

  3. 不可写入缓冲区 {

     

      struct hang { } ;     加入写等待队列      ;

  }

    

 

 

read v:

  1. 写等待队列(w_wq)有元素 {

    弹出读w_wq 头元素S1

    读Arr[recv]元素S2, 将 S2写入v  

    S1 写入Arr[recv]

  }

  

  2. 缓冲区非空 {

    读Arr[recv]元素S2, 将 S2写入v 

  }

  3. 缓冲区空 {

    同上,加入读等待队列

  }

  

 

posted on 2024-12-14 00:34  towboat  阅读(30)  评论(0)    收藏  举报