Почему вывод этого кода неверен?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему вывод этого кода неверен?

Сообщение Anonymous »

Обычно вывод всегда должен быть 200. Но вывод «totalMoney» иногда меньше 200. В чем здесь проблема и как ее исправить?

Код: Выделить всё

#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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»