The concept utx::param_mutex is used to constrain and match a lockable mutex, to require a type of a mutex satisfy basic standard Mutex requirements. These types satisfy utx::param_mutex concept: std::mutex, std::recursive_mutex, std::timed_mutex, std::shared_mutex, std::shared_timed_mutex, etc., and many more. utx::param_mutex is not exactly the same as the description of standard Mutex requirements, but it works for utx::print.
utx::param_mutex is designed for utx::print at first, but it can be used for other multithread programming too.
By passing a mutex object to utx::print, that mutex will be locked and unlocked inside utx::print, so make sure the mutex status is unlock when calling utx::print with the mutex, unless it is a Recursive-Mutex, otherwise it's deadlock.
#include <utxcpp/core.hpp> #include <utxcpp/thread.hpp> int main() { std::mutex mutex; auto f1 = utx::async( [&mutex] { // mutex type is constrained by utx::param_mutex of operator() of utx::print. utx::print(mutex, "Hell", "World!", 3.3); } ); }
c++ std::exception:
std::cout.write(err.data(), err.size());
std::cout << std::endl;
caught:
================================================== # The c++ programming language. # # # # Home: cppfx.xyz # # E # # Deck # ==================================================