首先几个 东西 : 环形缓冲区 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. 缓冲区空 {
同上,加入读等待队列
}