#include <atomic>
#include <iostream>
#include <vector>
int main() {
std::cout << "Example 1: Basic TaskSet with simple tasks\n";
{
std::atomic<int> counter(0);
for (int i = 0; i < 10; ++i) {
taskSet.
schedule([&counter, i]() { counter.fetch_add(i, std::memory_order_relaxed); });
}
std::cout << " Sum of 0..9 = " << counter.load() << " (expected: 45)\n";
}
std::cout << "\nExample 2: ConcurrentTaskSet (schedule from multiple threads)\n";
{
std::atomic<int> total(0);
for (int i = 0; i < 5; ++i) {
taskSet.
schedule([&taskSet, &total, i]() {
for (int j = 0; j < 2; ++j) {
[&total, i, j]() { total.fetch_add(i * 10 + j, std::memory_order_relaxed); });
}
});
}
std::cout << " Total from nested scheduling = " << total.load() << "\n";
}
std::cout << "\nExample 3: TaskSet with custom ThreadPool\n";
{
std::vector<int> results(4, 0);
for (size_t i = 0; i < results.size(); ++i) {
taskSet.
schedule([&results, i]() { results[i] =
static_cast<int>(i * i); });
}
std::cout << " Squares: ";
for (int r : results) {
std::cout << r << " ";
}
std::cout << "\n";
}
std::cout << "\nExample 4: TaskSet cancellation\n";
{
std::atomic<int> completed(0);
std::atomic<int> skipped(0);
for (int i = 0; i < 1000; ++i) {
taskSet.
schedule([&taskSet, &completed, &skipped]() {
skipped.fetch_add(1, std::memory_order_relaxed);
return;
}
completed.fetch_add(1, std::memory_order_relaxed);
});
if (i == 100) {
}
}
bool wasCanceled = taskSet.
wait();
std::cout << " Was canceled: " << (wasCanceled ? "yes" : "no") << "\n";
std::cout << " Completed tasks: " << completed.load() << "\n";
std::cout << " Skipped tasks: " << skipped.load() << "\n";
}
std::cout << "\nExample 5: Early exit from tasks using canceled()\n";
{
std::atomic<int> itemsProcessed(0);
taskSet.
schedule([&taskSet, &itemsProcessed]() {
for (int i = 0; i < 1000; ++i) {
break;
}
itemsProcessed.fetch_add(1, std::memory_order_relaxed);
}
});
std::cout << " Items processed before cancellation: " << itemsProcessed.load() << "\n";
}
std::cout << "\nAll TaskSet examples completed successfully!\n";
return 0;
}
void schedule(F &&f, bool skipRecheck=false)
DISPENSO_DLL_ACCESS bool wait()
DISPENSO_DLL_ACCESS bool wait()