一、题目要求
使用C++的线程并发库,实现并模拟多人在线同时转账的过程,确保转账不能出现差错。
例如:
Account A(“xiaoming”, 1000);
Account B(“zhangqiang”, 2000);
Account C(“zq”, 1500);
B->A 200 A 1200 B 1800
B->C 500 B 1300 C 2000
C->A 300 A 1500 C 1700
二、代码实现
#if 1
#include<iostream>
#include<mutex>
#include<condition_variable>
#include<map>
using namespace std;
std::mutex mtx;
std::condition_variable cv;
class Account
{
public:
Account() :name(), money(0) {
}
Account(const string& na, int my) : name(na), money(my) {
}
~Account() = default;
const int GetMoney() const
{
return money;
}
void SetMoney(int m)
{
money = m;
}
const string& GetName()const
{
return name;
}
private:
string name;
int money;
};
class Bank
{
public:
~Bank() {
}
static Bank& GetSingleBank()
{
return bank;
}
//A转给B money
void TransAccounts(Account& A, Account& B)
{
unique_lock<mutex> lock(mtx);
while (map.count(A.GetName()