mod partition;
pub use partition::{
clear_parallel_executor, partition_for_each, partition_for_each_available,
partition_for_each_with, partition_map, partition_map_available, partition_map_with,
partition_read_for_each, partition_read_for_each_available, partition_read_for_each_with,
partition_read_map, partition_read_map_available, partition_read_map_with,
register_parallel_executor, ParallelExecutor, PartitionPlan,
};
use super::SyncRegionToken;
#[inline]
pub fn scope_exclusive<R, F>(f: F) -> R
where
R: Send,
F: Send + for<'brand> FnOnce(SyncRegionToken<'brand>) -> R,
{
std::thread::scope(|scope| {
let handle = scope.spawn(|| {
let token = unsafe { SyncRegionToken::new_unchecked() };
f(token)
});
match handle.join() {
Ok(result) => result,
Err(payload) => std::panic::resume_unwind(payload),
}
})
}