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

C 20

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++] 대문자, 소문자 구분 하는 방법 (islower, isupper)

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

[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+]참조자_레퍼런스(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

[c/c++] 다양한 메뉴에 따라 출력되는 사각형/HDC hdc =GetWindowDC(GetForgroundWindow());

#pragma once class CPostion { protected: int m_x0; int m_y0; int m_x1; int m_y1; public: void setPosition(int x0, int y0, int x1, int y1); }; #include"position.h" void CPostion::setPosition(int x0, int y0, int x1, int y1) { m_x0=x0; m_y0=y0; m_x1=x1; m_y1=y1; } #pragma once #include"position.h" class CRectangle : public CPostion { private: int m_xpos; int m_ypos; int m_size; public: void setMpos..

[C/C++] c++ espresso(에스프레소) chapter 08 상속 연습문제

1. 클래스 각각 헤더에 정의를 cpp에 내용을 적었습니다. #pragma once #include using namespace std; class Employee { protected: string name; int number; public: Employee(); ~Employee(); void setEmployee(string n, int num); void getEmployee(); virtual void computeSalary(); }; #include"Employee.h" Employee::Employee() { this->name = ""; this->number = 0; } Employee::~Employee() {} void Employee::setEmployee(string n, in..

[C/C++] c언어로 원 그리는 프로그램/GetWindowDC(GetForegroundWindow());

헤더 파일과 cpp 파일 두개로 나누었습니다. 원을 그리기 위해서는 아래와 같은 함수가 필요합니다. HDC hdc = GetWindowDC(GetForegroundWindow()); Ellipse(hdc, x의 시작, y이 시작, x의 끝, y의 끝); 위 함수들은 #include 헤더 파일에 정리 되어있어 미리 선언이 필요합니다. 헤더파일 입니다. circle 구조체를 선언하였습니다. 주석 1번은 x, y값과 반지름을 입력하면 해당 위치에 원을 그려줍니다. 주석 2번은 랜덤으로 10개의 원을 그립니다. 주석 3번은 원을 몇개 그릴지 입력 받고 랜덤으로 입력받은 수 만큼 그립니다. 아래느 소스입니다. #pragma once class CCircle { private: int m_x; int m_y; in..

반응형