Thanks for all the responses so far! *Niall*: I'm afraid using HPX is out of scope in context of a Boost library. If all else fail, I'll fall back to a simple implementation (e.g: 1). IMO, depending on this design decision will be this library a great tool or just something nice. *Adam*: I'm not sure how this smart queue would solve the problem of reentrancy. Currently, if a thread returns from a transformation, it can never be resumed. This makes yielding hard/not possible. If we make reentrancy mandatory, then we face the next challenge, which you described above IIUC. The think the key points are here: (1) A task can yield, and can point to an other task which is waited upon. (2) A task (but not the thread) can "block" on the upstream queue, if it's empty. If it's not clear, I'll describe these in greater length. *Oliver*: I considered using coroutines, however I don't clearly see how this would solve this problem exactly. IIUC, Coroutines provide a way for a single thread to execute multiple methods. I'd need multiples threads executing multiple methods in a similar fashion. I'll continue thinking about this. I couldn't found it in the docs. Does Coroutine have any drawbacks? Thanks, Benedek