<aside> 📗 목차


</aside>

순서를 명시하여 데드락 문제를 해결할 수 있다!

→ 기존 코드 (순서 명시 X)

#include "pch.h"
#include "AccountManager.h"
#include "UserManager.h"

void AccountManager::ProcessLogin()
{
	**//! AccountManager의 락을 걸어줌**
	lock_guard<mutex> guard(_mutex);	

	**//! UserManager의 락을 걸어줌**
	User* user = UserManager::Instance()->getUser(100);
}
#include "pch.h"
#include "UserManager.h"
#include "AccountManager.h"

void UserManager::ProcessSave()
{
	**//! UserManager의 락을 걸어줌**
	lock_guard<mutex> guard(_mutex);

	**//! AccountManager의 락을 걸어줌**
	Account* account = AccountManager::Instance()->GetAccount(100);
}

→ 기존 코드 (순서 명시 O)

#include "pch.h"
#include "AccountManager.h"
#include "UserManager.h"

void AccountManager::ProcessLogin()
{
	**//! AccountManager의 락을 걸어줌**
	lock_guard<mutex> guard(_mutex);	

	**//! UserManager의 락을 걸어줌**
	User* user = UserManager::Instance()->getUser(100);
}
#include "pch.h"
#include "UserManager.h"
#include "AccountManager.h"

void UserManager::ProcessSave()
{
	**//! AccountManager의 락을 걸어줌**
	Account* account = AccountManager::Instance()->GetAccount(100);

	**//! UserManager의 락을 걸어줌**
	lock_guard<mutex> guard(_mutex);
}

즉, 항상 AccountManger의 키를 먼저 받아오게 하면 되는거 아닌감?