Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bank.h"
- namespace bank {
- transaction user_transactions_iterator::wait_next_transaction() {
- std::unique_lock ul(pointer_on_user->user_mutex);
- while (size_ >= static_cast<int>(pointer_on_user->operations.size())) {
- pointer_on_user->cond.wait(ul);
- }
- return pointer_on_user->operations[size_++];
- }
- void user::transfer(user &counterparty,
- int amount_xts,
- const std::string &comment) {
- if (counterparty.name() == user_name) {
- return;
- }
- std::scoped_lock sl(user_mutex, counterparty.user_mutex);
- if (balance - amount_xts < 0) {
- throw not_enough_funds_error(balance, amount_xts);
- }
- operations.emplace_back(&counterparty, -amount_xts, comment);
- counterparty.operations.emplace_back(this, amount_xts, comment);
- balance -= amount_xts;
- counterparty.balance += amount_xts;
- cond.notify_all();
- counterparty.cond.notify_all();
- }
- } // namespace bank
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement