I want to get a thread-pool behavior using TBB. But whenever I read documents about TBB they always talk about parallel-for, parallel-dowhile etc. In contrast what I need is a main thread to assign tasks to a thread pool so those tasks will be executed ‘on their own’ – execute tasks asynchronously. Tasks here can be event handling for a GUI.
Is the TBB task scheduler appropriate for such behavior? The impression I got from task scheduler is that it’s only beneficial if I have tasks that can be broken down and executed in parallel to each other.
Starting from version 3.0, TBB has support for asynchronous execution of tasks. For that, a special work offering method
tbb::task::enqueue()was added. Unliketbb::task::spawn(), this method guarantees that the enqueued task will be executed even if the originating thread never enters a task dispatch method such aswait_for_all().A short usage example for
task::enqueue():As @JimMishell mentioned in the comment, an example how to use it for handling of GUI events can be found in “Design Patterns”; and the formal description of the method is available in the Reference manual (see TBB documentation for both).