Main Thread: Lock PlayerList Lock MonsterList Player targets Monster If not BattleThread exists Monster->ChallengerList->Add(Player); Create BattleThread with Player->MeleeAttack(Monster); Unlock PlayerList Unlock MonsterList EndIf BattleThread: Do Lock MonsterList Lock PlayerList If Monster->HP <= 0 Calculate rewards If sizeof(Monster->ChallengerList) / sizeof(Challenger) == 1 MonsterList->Delete(Monster); Else Monster->ChallengerList->Delete(Player); EndIf End BattleThread Else If NextHitTime < CurrentTime && Player->isAttacking Player attacks Monster by Damage Monster->HP -= Damage; NextHitTime = CurrentTime + TimeDelay; EndIf EndIf Unlock MonsterList Unlock PlayerList While(1)