기록은 기억을 이기고 시간보다 오래 남는다.
반응형

C++ 24

Reader-Writer Lock

안녕하세요, 준준입니다. 이번 게시물에서는 **RwLock(Read-Write Lock)**에 대해 알아보겠습니다. RwLock은 읽기와 쓰기의 동시 접근을 관리하기 위한 동기화 메커니즘입니다.여러 스레드가 데이터를 읽을 때는 동시에 접근할 수 있지만,데이터를 쓸 때는 오직 하나의 스레드만이 접근할 수 있도록 하는 기능을 제공합니다.아래의 그림을 보면 이해가 쉬우실까요? 왜 필요한가요? 일반적으로 데이터는 읽기가 빈번하게 일어나고쓰기는 그다지 자주 발생하지 않는 경우가 많습니다. 매번 Lock을 걸어둔다면 쓰기 작업이 거의 없는 상황에서도불필요한 경합(Contension)이 발생할 수 있습니다. RwLock은 이러한 상황에서 효율적으로 동작하여 성능을 향상할 수 있습니다.  RwLock의 주요 특징은 다..

게임 서버 2024.05.29

[c++] Future 병렬 처리 방법

Future은 직렬 방식의 단순한 처리 방법에서 병렬로 동시에 처리 할 수 있도록 하는 기능이다.C++11에서 추가된 std::future은 비동기 계산을 가능하게 해주는 기능입니다.이를 통해 현재 스레드에서 계산이 끝나지 않은 작업을 다른 스레드에서 계속 수행할 수 있습니다.결론)mutax, condition_variable까지 가지 않고 단순한 애들을 처리할 수 있는 (일회성으로 일어나는)\ future 객체를 만드는 방법은 여러가지 방법이 있음 특히나 , 한 번 발생하는 이벤트에 유용하다. 1)async = 원하는 함수를 비동기적으로 실행 2)promise =  결과무를 promise를 통해 future로 받아줌 3)packaged_task = 원하는 함수의 실행 결과를 packaged_task를 ..

[C++] 캐시란 무엇일까? cash (예시 코드 포함)

안녕하세요 준준입니다.오늘은 캐시에 대해서 알아보고 코드를 이용해서 실제 캐시가 어떻게 작동하는지 알아가는 시간을 가지도록 하겠습니다.캐시란 무엇일까?캐쉬는 저장된 데이터를 더욱 빠르게 접근하기 위해 cpu 안에 존재하는 메모리입니다.CPU가 메인 메모리를 읽거나 쓰고자 할 때, 먼저 그 주소에 해당하는 데이터가 캐시에 존재하는지 살피고 데이터가 존재한다면 직접 캐시를 읽고 존재하지 않는다면 메인 메모리에 접근합니다. 이 경우 CPU는 메인 메모리에 직접 접근해서 전송된 데이터를 캐시에 복사해 넣음으로써 다음에 CPU가 더 빠르게 데이터를 찾을 수 있게 도와줍니다. 캐시는 임시 저장소라고 생각하시면 됩니다.  캐시가 필요한 이유cpu는 매우 빠른 속도로 연산이 되는데 연산 속도보다 데이터를 가지고 오는 ..

[C/C++] Stack in c++ (기본 사용법, 예제)

안녕하세요 준준 입니다. 오늘은 C++ STL 중 하나인Stack(스택)에 대해 알아보도록 하겠습니다.What is Stack?스택의 사전적 의미로는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯 데이터를 쌓는 자료 구조라고 할 수 있습니다. 스택은 대표적인 LIFO (Last In First Out) 구조입니다.따라서 제일 마지막에 넣은 데이터가 가장 먼저 빠져나가는 것을 알 수 있습니다.쉬운 예시로 쌓여 있는 그릇을 생각하시면 쉽습니다. 상식적으로 그릇은 쌓을 때 맨 위에서부터 쌓고 꺼낼 때는 맨 위에부터 꺼내곤 합니다.따라서 가장 최근에 넣은 그릇을 가장 빨리 쓰게 됩니다.이해가 조금 되셨을 까요?Stack의 특징1. 먼저 들어간 자료가 나중에 나오는 구조2. 시스템 해킹에서 버퍼오버플로우 ..

[c++] 대문자, 소문자 구분 하는 방법 (islower, isupper)

안녕하세요. 준준입니다. 오늘은 c++에서 소문자 대문자 구분하는 방법에 대해 알아보도록 하겠습니다. c++에서는 islower, isupper 함수를 사용할 수 있습니다. 헤드파일 먼저 해당 함수를 사용하기 위해서는 #include 을 선언해 주어야 합니다. isupper() isupper() 함수는 인자로 전달된 문자가 대문자인지 여부를 확인합니다. 만약 대문자이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. islower() islower() 함수는 인자로 전달된 문자가 소문자인지 여부를 확인합니다. 만약 소문자이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 더보기 대문자인지 소문자인지 확인을 했으면 바꿀 수도 있어야겠죠? 아래 함수들은 각각 대문자를 소문자로 소문..

[C++]size_t 와 string::npos란 무엇일까?

안녕하세요 준준입니다. 이번 게시글에서는 size_t와 string::npos에 대해서 알아보도록 하겠습니다. size_t란? size_t는 C++ 표준 라이브러리에서 정의된 데이터 타입으로, 부호 없는 정수형(unsigned integer)으로 사용됩니다. size_t는 보통 메모리 할당, 배열 인덱스, 문자열 길이 등을 나타내는데 사용됩니다. size_t는 각각의 플랫폼에서 동일한 크기를 가지도록 보장되어 있으며, 대부분의 컴파일러에서는 32비트에서는 4바이트, 64비트에서는 8바이트로 정의되어 있습니다. string::npos란? string::npos는 C++ 표준 라이브러리에서 제공하는 상수로, 문자열에서 해당 문자열이 존재하지 않는 경우를 나타내는 값입니다. 예를 들어, string::find..

[C++] pow, sqrt 함수란?(루트함수, 제곱, 제곱근)

안녕하세요 준준 입니다. 이번 개시글에서는 pow() 함수와 sqrt() 함수에 대해 알아보도록 합시다. 간단하게 제곱과 제곱근과 관련이 되어 있습니다. 우선 이 함수들를 사용하기 위해서는 #include 헤더 파일을 선언해 주어야 합니다. c++에서의 pow 함수 원형은 아래와 같습니다. 1. double pow(double base, double n) 2. float pow(float base, float n) 3. long double pow(long double base, long double n) -pow의 기능 base가 되는 함수를 n만큽 제곱을 해줍니다. -pow 사용법: 12에 2제곱을 구한다면 -> pow(12,2); 5.5에 9.9제곱을 구현다면 ->pow(5.5,9.9); 다음으로 ..

[c/c++] 일, 월, 년을 원하는 만큼 더하는 프로그램

문제 1 여러분은 아래와 같은 Date 클래스를 디자인 하려고 합니다. SetDate 는 말그대로 Date 함수 내부를 초기화 하는 것이고 AddDay, AddMonth, AddYear 는 일, 월, 년을 원하는 만큼 더하게 됩니다. 한 가지 주의할 점은 만일 2012 년 2 월 28 일에 3 일을 더하면 2012 년 2 월 31 일이 되는 것이 아니라 2012 년 3 월 2 일이 되겠지요? 코드 #include using namespace std; class Date { private: int year_; int month_; // 1 부터 12 까지. int day_; // 1 부터 31 까지. public: void SetDate(int year, int month, int date) { year_..

[c/c+]참조자_레퍼런스(reference)

1). 레퍼런스는 반드시 누구를 참조하는지 명확하게 표시하여야한다. 2.) 레퍼런스는 상수값을 직접 받아오지 못한다. ex1). 이 경우에는 에러가 난다. 이유는 참조자는 상수값 즉 리터럴(literal) 받지 못한다. 따라서 추가하거나 더 변경할 부분은 빨간색으로 표시해 뒤었다. //case 1 //case 2 #include #include using namespace std; using namespace std; int main() int main() { { const int &ref=10; int ref1=10; cout

반응형