//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/38qMMWoz6
#include <mutex> // recursive_mutex
#include <iostream>
struct MulDiv {
std::recursive_mutex mx_;
int value_;
explicit MulDiv(int value) : value_{value} {}
void mul(int x) {
std::lock_guard lk1(mx_); // innen
value_ *= x;
}
void div(int x) {
std::lock_guard lk2(mx_); // innen
value_ /= x;
}
void muldiv(int x, int y){
std::lock_guard lk3(mx_); // außen
mul(x);
div(y);
}
};
int main() {
MulDiv m{42}; // 3*7*2 *5
m.muldiv(5, 15);
std::cout << m.value_ << '\n'; // Ausgabe: 14
}