| 123 | } |
| 124 | |
| 125 | IRequestRef Next() override { |
| 126 | IRequestRef ret; |
| 127 | |
| 128 | C_.Inc(); |
| 129 | while (!Q_.Dequeue(&ret)) { |
| 130 | E_.Wait(); |
| 131 | } |
| 132 | C_.Dec(); |
| 133 | |
| 134 | if (Q_.Size() && C_.Val()) { |
| 135 | E_.Signal(); |
| 136 | } |
| 137 | |
| 138 | return ret; |
| 139 | } |
| 140 | |
| 141 | private: |
| 142 | TEvent E_; |