#include <xtd/xtd>
namespace mutex_example {
class program {
public:
static void main() {
for (auto i = 0; i < num_threads; ++i) {
threads.emplace_back(thread_proc);
threads.back().name(string::format("thread_{0}", i + 1));
threads.back().start();
}
thread::join_all(threads);
}
static void thread_proc() {
for(auto i = 0; i < num_iterations; ++i)
Use_resource();
}
private:
static void Use_resource() {
console::write_line("{0} is requesting the mutex",
thread::current_thread().name());
mut.wait_one();
console::write_line("{0} has entered the protected area",
thread::current_thread().name());
thread::sleep(500);
console::write_line("{0} is leaving the protected area",
thread::current_thread().name());
mut.release_mutex();
console::write_line("{0} has released the mutex",
thread::current_thread().name());
}
inline static list<thread> threads;
inline static mutex mut;
inline static constexpr int num_iterations = 1;
inline static constexpr int num_threads = 3;
};
}
#define startup_(main_method)
Defines the entry point to be called when the application loads. Generally this is set either to the ...
Definition startup.hpp:168