# Release Notes » Release 3.8.0 (2024/10/02)

This release includes several new changes, such as exception support, improved scheduling algorithms,

## Download

Taskflow 3.8.0 can be downloaded from here.

## System Requirements

To use Taskflow v3.8.0, you need a compiler that supports C++17:

- GNU C++ Compiler at least v8.4 with -std=c++17
- Clang C++ Compiler at least v6.0 with -std=c++17
- Microsoft Visual Studio at least v19.27 with /std:c++17
- AppleClang Xcode Version at least v12.0 with -std=c++17
- Nvidia CUDA Toolkit and Compiler (nvcc) at least v11.1 with -std=c++17
- Intel C++ Compiler at least v19.0.1 with -std=c++17
- Intel DPC++ Clang Compiler at least v13.0.0 with -std=c++17

Taskflow works on Linux, Windows, and Mac OS X.

#### Note

Although Taskflow supports primarily C++17, you can enable C++20 compilation through `-std=c++20` to achieve better performance due to new C++20 features.

## Release Summary

This releases (1) enhances the scheduling performance through C++20 atomic notification and a bounded queue strategy and (2) revised the semaphore model for better runtime control.

#### Note

When compiling Taskflow with C++20, applications should see improved performance due to C++20 atomic wait and notification.

## New Features

### Taskflow Core

- Enhanced the core scheduling algorithm using a new bounded queue strategy
- Enhanced the core scheduling performance using C++20 atomic notification

    # compile your taskflow program with C++20 enabled
    ~$ g++ -std=c++20 my_taskflow.cpp

- Revised the semaphore programming model for better runtime control through tf::Runtime

    tf::Executor executor(8);   // create an executor of 8 workers
    tf::Taskflow taskflow;
    tf::Semaphore semaphore(1); // create a semaphore with initial count 1
    for(size_t i=0; i<1000; i++) {
      taskflow.emplace([&](tf::Runtime& rt){
        rt.acquire(semaphore);
        std::cout << "critical section here (one worker here only)\n";
        critical_section();
        rt.release(semaphore);
      });
    }
    executor.run(taskflow).wait();

- Enhanced async-tasking performance through TLS
- Added async-task benchmark
- Added non-blocking notifier and atomic notifier modules
- Added tf::BoundedTaskQueue and tf::UnboundedTaskQueue
- Added tf::Freelist module to replace the centralized overflow queue
- Removed the redundant exception handling in object pool

### Utilities

## Bug Fixes

- Fixed the compilation error for not finding the C++ atomic library
- Fixed the missing tf::Runtime in asynchronous tasking
- Fixed the non-heterogeneity of tf::Taskflow::for_each_index
- Fixed the bug of UUID unit test in a multithreaded environment

## Breaking Changes

- Removed the support of object pool by default
- Removed the support of prioritized tasking due to inconsistency with work stealing

## Documentation

- Revised Limit the Maximum Concurrency
- Removed Prioritized Tasking
- Fixed typos in multiple pages

## Miscellaneous Items

Please do not hesitate to contact Dr. Tsung-Wei Huang if you intend to collaborate with us on using Taskflow in your scientific computing projects.

Tab / T to search, Esc to close
…

Search for symbols, directories, files, pages or modules. You can omit any prefix from the symbol or file path; adding a `:` or `/` suffix lists all members of given symbol or directory.

Use ↓ / ↑ to navigate through the list, Enter to go. Tab autocompletes common prefix, you can copy a link to the result using ⌘ L while ⌘ M produces a Markdown link.

Sorry, nothing was found.