7#ifndef PXR_BASE_WORK_TBB_ISOLATING_DISPATCHER_IMPL_H
8#define PXR_BASE_WORK_TBB_ISOLATING_DISPATCHER_IMPL_H
12#include "pxr/base/work/api.h"
13#include "pxr/base/work/workTBB/dispatcher_impl.h"
15#include <tbb/task_arena.h>
25#define WORK_IMPL_HAS_ISOLATING_DISPATCHER
27PXR_NAMESPACE_OPEN_SCOPE
29class WorkImpl_IsolatingDispatcher
32 WORK_API WorkImpl_IsolatingDispatcher();
33 WORK_API ~WorkImpl_IsolatingDispatcher();
35 WorkImpl_IsolatingDispatcher(WorkImpl_IsolatingDispatcher
const &) =
delete;
36 WorkImpl_IsolatingDispatcher &operator=(
37 WorkImpl_IsolatingDispatcher
const &) =
delete;
39 template <
class Callable>
40 inline void Run(Callable &&c) {
41 _arena->execute([&dispatcher = _dispatcher, &c](){
42 dispatcher.Run(std::forward<Callable>(c));
57 tbb::task_arena *_arena;
58 WorkImpl_Dispatcher _dispatcher;
61PXR_NAMESPACE_CLOSE_SCOPE