Код: Выделить всё
#include
#include
#include
#include
#include
using namespace std;
class Account {
public:
Account(string name, double money): mName(name), mMoney(money) {};
public:
void changeMoney(double amount) {
unique_lock lock(mMoneyLock);
mConditionVar.wait(lock, [this, amount] {
return mMoney + amount > 0;
});
mMoney += amount;
mConditionVar.notify_all();
}
string getName() {
return mName;
}
double getMoney() {
return mMoney;
}
private:
string mName;
double mMoney;
mutex mMoneyLock;
condition_variable mConditionVar;
};
class Bank {
public:
void addAccount(Account* account) {
mAccounts.insert(account);
}
void transferMoney(Account* accountA, Account* accountB, double amount) {
accountA->changeMoney(-amount);
accountB->changeMoney(amount);
}
double totalMoney() const {
double sum = 0;
for (auto a : mAccounts) {
sum += a->getMoney();
}
return sum;
}
private:
set mAccounts;
};
mutex sCoutLock;
void randomTransfer(Bank* bank, Account* accountA, Account* accountB) {
while(true) {
double randomMoney = ((double)rand() / RAND_MAX) * 100;
{
lock_guard guard(sCoutLock);
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79088244/why-is-the-output-of-this-code-incorrect[/url]