| 62 | |
| 63 | template <typename U = T> |
| 64 | bool try_enqueue(U &&item) { |
| 65 | auto waitSuccess = enqueueSemaphore_.try_wait(); |
| 66 | if (!waitSuccess) { |
| 67 | return false; |
| 68 | } |
| 69 | queue_.writeIfNotFull(std::forward<U>(item)); |
| 70 | dequeueSemaphore_.signal(); |
| 71 | return true; |
| 72 | } |
| 73 | |
| 74 | std::optional<T> try_dequeue() { |
| 75 | T item; |