본문 바로가기
반응형

목록363

C++] mutex정의와 종류에 대하여(RAII mutex) 1. mutex란?? C++ 11 버전에 나온 class로 Thread들의 동기화를 해줄 수 있게 해주는 기능을 가지고 있습니다. Thread들의 동기화란 무엇일까?? 예를들어보자. 우리는 게임을 하기위해 캐릭터를 생성해야 합니다. 해당 캐릭터를 만들려면 캐릭터의 이름이 필요한데, 캐릭터 ID의 중복검사를 한 후 없으면 캐릭터 생성을 할 수 있습니다. 이런식으로 함수에 접근할 것입니다. 하지만 동시에 접근하는 유저수가 100명 이상이라면??? 그 100명이 똑같은 ID로 캐릭터를 생성하려고 한다면?? 어떻게 될까요??? 중복된다고 return받는 Thread들이 있을 수 있고 중복검사를 동시에 해서 똑같은 ID로 만들어지는 Thread들도 있을 것입니다. 왜?? context switching때문입니다... 2020. 6. 13.
C++] RAII란? 1. RAII란?RAII는 Resource acquisition is initialization의 약자로 직여해보면 "자원 흭득을 초기화한다."라고 해석이 됩니다. 즉, "흭득된 자원을 초기화 한다."라고 생각하시면 됩니다. 그럼 RAII는 뭐냐? 키워드냐? 클래스냐? 함수냐?? RAII는 C++설계 패턴중 하나인 키워드입니다. 이러이러한 식의 설계를 RAII라고 부르자고 된것입니다. 그럼 여기서 말하는 이러이러한 식의 설계는 무엇일까? 동적인 프로그래밍을 위해 new라는 키워드를 사용해 힙 메모리에서 메모리를 할당받습니다. 할당 받는순간 해당 메모리의 resource를 프로그래머는 직접 관리하게 됩니다. 해당 메모리 공간을 잘 활용한다면 정말 좋겠지만, 요놈의 실수, 예기치 못한 exception등.... 2020. 6. 13.
프로그래머스] C++ 연습문제 - JadenCase 문자열 만들기(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12951 1.문제 2. 조건1. 주어지는 문장에는 숫자, 소문자, 대문자, 스페이스가 들어있습니다.2. 문장의 앞단어가 알파벳일 경우 무조건 대문자로 바뀌어야 합니다.3. 스페이스바를 기준으로 앞 단어는 대문자로 되어야하고 나머지는 소문자여야 합니다. 3. 풀이저는 처음 시작던어에 toupper()함수를 통해 대문자로 만들어주고 진행했습니다.그리고 스페이스바를 만났을 때 다음 단어를 대문자로 바꿔줬습니다.여기서 주의해야할 점은 스페이스바가 연속으로 나올 경우입니다.따라서 저는 flag라는 bool변수를 통해 연달아 나.. 2020. 6. 12.
프로그래머스] C++ 연습문제 - 124 나라의 숫자(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다.아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12899 1. 문제124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.124 나라에는 자연수만 존재합니다.124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.10진법124 나라10진법124 나라1161422721348224119245121041자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.제한.. 2020. 6. 12.
프로그래머스] C++ Summer/Winter Coding(~2018) - 영어 끝말잇기(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12981 1.문제1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.이전에 등장했던 단어는 사용할 수 없습니다.한 글자인 단어는 인정되지 않습니다.다음은 3명이 끝말잇기를 하는 상황을 나타냅니다.tank → kick → know → wheel → land → dr.. 2020. 6. 12.
프로그래머스] C++ 2017팁스타운 - 예상 대진표(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12985 1. 문제△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는.. 2020. 6. 12.
프로그래머스] C++ 연습문제 - 땅따먹기(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12913 1. 문제땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다. 예를 들면, | 1 | 2 | 3 | 5 | | 5 | 6 | 7 | 8 | | 4 | 3 | 2 | 1 | 로 땅이 주어졌다면, 1행에서 네번째 칸 (5)를 밟았으면, 2행.. 2020. 6. 12.
프로그래머스] C++ 탐욕법(Greedy) - 단속카매라(level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/42884 1. 문제고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.제한사항차량의 대수는 1대 이상 10,000대 이하입니다.routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점.. 2020. 6. 12.
프로그래머스] C++ 탐욕법(Greedy) - 구명보트(level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다.아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/42885 1. 문제 설명무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다.예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다.구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다.사람들의 몸무게를 .. 2020. 6. 12.
C++ std::async 사용방법. 1. std::async에 대한 간단한 설명.std::async는 std::task 클래스 기반으로 만들어진 클래스로 Thread를 만들 때 사용됩니다.std::async는 std::thread와 달리 내부적으로 Thread Pool을 만들어 Thread를 관리하게 되며,예외처리, 값 return 등.... std::thread보다 안정적이며 프로그래머가 사용하기 편리한 기능입니다.std::async는 반환 값을 std::future로 받습니다. 2. std::async constructor#include #include void for_print(char c) { for (int i = 0; i 2020. 6. 10.
C++ thread와 async의 차이점 C++에서 병렬처리를 하기위해 여러가지 클래스를 제공합니다. C++에선 std::thread, std::future, std::async를 제공합니다. 그 중 많이 쓰이는 std::thread와 std::async에 대해 설명해볼까 합니다. 1. C++에서 Thread와 Async는 다른녀석인가? 둘다 같은 쓰레드입니다. 많이 햇갈리는게 Thread라는 개념이 있고, 각 언어별로 Thread를 사용하기위해 프로그래밍 내에 정의된 함수 혹은 객체를 불러옵니다. 해당 Thread를 불러오는 방법은 여러가지일 수 있습니다. JAVA의 interface인 run, 클래스 Thread, C언어의 pthread, C++의 thread, async, task 등.... 전부 다 Thread입니다. 특별한게 없습니다... 2020. 6. 9.
Thread와 Process의 Context Switching Context Switching이란? 우선 Thread에서의 Context Switching과 Process의 Context Switching은 같은 말입니다. 단지, 이 둘의 차이점은 내부에 있습니다. 그럼 의미가 동일한 Context Switching에 대해 간략한 설명을 하겠습니다. Process를 예를 들면..... "나는 현재 멜론을 들으면서, 롤을 하고 있으며, 친구들에게 카카오톡 문자가 PC로 오고 있다." 라고 한다면 총 3번의 Context Switching이 일어난 것입니다. 멜론 노래를 재생 -> 게임 롤(LOL)에서의 컨트롤 -> 카카오톡 문자 -> 멜론 노래 재생 -> 게임 롤(LOL)컨트롤 -> 카카오톡 문자...... 이러한 과정들이 0.0몇초만에 반복되게 됩니다. 너무 빠르게.. 2020. 6. 5.
C++ 사용자 Windows의 경로를 가져오기. SHGetKnownFolderPath() 키워드를 사용하여 원하는 경로를 가져올 수 있습니다. 해당 함수를 사용하려면 해더파일을 참조해야 합니다. 사용법 #include #include using namespace std; int main(void) { PWSTR path = NULL; SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &path); //바탕화면 경로 가져오기. wprintf(L"%s\n", path); CoTaskMemFree(path); SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &path); //문서 경로 가져오기. wprintf(L"%s\n", path); CoTaskMemFree(path); ret.. 2020. 6. 4.
C++ 파일 입출력(ofstream, ifstream) Window전용 C++에서 파일 입출력할 때 쓰이는 ofstream과 ifstream에 대해 알아보도록 하겠습니다.(Windows) ofstream(output으로 write할 때 쓰임) : http://www.cplusplus.com/reference/fstream/ofstream/ ifstream(input으로 read할 때 쓰임) : http://www.cplusplus.com/reference/fstream/ifstream/ 사용법#include #include #include #include #include using namespace std; string text = "In 1979, Bjarne Stroustrup, a Danish computer scientist, began work on \"C with.. 2020. 6. 4.
프로젝트 진도가 안나가는 이유.... 현재 cpp casablanca 해더파일을 뜯어서 보고 있습니다........ -0- 어떤식으로 코드가 진행되는지 알아야 자유롭게 코딩을 할 수 있기 때문입니다. 지금 가장 햇갈리는 부분이 thread, task, asnyc, boost::asio 부분입니다. task와 asnyc, boost::asio는 내부적으로 스레드를 관리하는거 까진 알았는데 어떤식으로 작동하는지 아직도 두루뭉실 합니다. asnyc와 boost::asio는 스래드 하나로 i/o 두게를 담당 할 수 있는지도 햇갈립니다. 자료가 너무 많다보니 계속 찾는데도 했갈리네요.... 지금까지 알아낸 바로는 casablanca의 listener 부분은 task기반으로 만들어 졌으며, callback을 자주 활용해야 할 것 같습니다..then 키.. 2020. 5. 31.
728x90
반응형

스킨편집 -> html 편집에서