분류 전체보기 114

Race Condition 경쟁상태

1. 개요 오늘은 OS에 경쟁상태 Race Condition에 대해서 공부하도록 하겠습니다. 2. Race Condition(경쟁상태)? 경쟁상태란 두 개 이상의 cocurrent한 프로세스(혹은 스레드)들이 하나의 자원(리소스)에 접근하기 위해 경쟁하는 상태를 말합니다. 3. Critical Section(임계영역) 통장에 돈이 100만원 있습니다. 지난달에 친구에게 빌렸던 50만원을 갚으려고 이체를 하고 있었습니다. 계좌번호와 금액을 입력하고 송금 버튼을 눌렀습니다. 그런데, 오늘 마침 카드값 70만원이 빠져나가는 날입니다. 정말정말 우연히 저의 이체와 카드값 이체가 동시에 일어났습니다. 그런데 두 이체가 통장에 있는 잔액을 확인 했을 때 100만원으로 이체들이 모두 성공해 버렸습니다. 은행에 비상이..

스마트 포인터의 new와 make의 차이

1. 개요 오늘은 C++의 스마트 포인터의 new와 make의 차이를 공부하겠습니다. 2. new VS make 스마트 포인터를 동적 할당하는 방식은 new랑 make_unique 등 입니다. 하지만 스마트포인터를 동적할당할때 new보다는 make를 사용하여 할당을 하는것이 매우 효과적이라고 합니다. make는 C++14부터 나온 기법으로 스마트포인터의 동적할당을 담당하고있습니다. 그럼 new보다 나은점을 알려드리겠습니다. 3. new 보다 나은점 1. 객체의 형식이 되풀이 되지 않는다. class Base { public: Base(){} ~Base(){} }; int main() { auto p1 = make_unique(); unique_ptr p2(new Base); } 중복을 피하라는 소프트웨어..

벡터의 내적으로 라디안 및 디그리 구하기

1. 개요 안녕하세요 오늘은 벡터의 내적으로 라디안 및 디그리를 구하는 방식을 알아 보겠습니다. 2. 내적의 공식 내적의 공식은 벡터 A와 B과 있으면 2D방면에서 (Ax*Bx) + (Ay*By)입니다. 하지만 다른 방식으로 구할수도 있습니다 바로 벡터의 크기 입니다. |A||B|cosΘ 입니다. 벡터크기는 하나당 sqrt(Ax^2+Ay^2)으로 볼수 있습니다. 그리고 cos인의 그래프를 보면 다음과 같습니다. 각도가 0도면 1 90도면 0입니다. 3. 라디언 구하기 그래서 라디언을 구하는 방식은 다음과 같습니다. acos(A+B/|A|*|B|) 입니다. 이것을 C++로 표현하면 다음과 같습니다. double a2 = sqrt(pow(2,2)+pow(5,2)); double b2 = sqrt(pow(-2..

Inline 에 대하여

1. 개요 오늘은 C++에 inline에 대하여 알아봅시다. 2. Inline? 인라인 함수는 C++ 언어에서 코드의 효율성을 고려하여 만들어진 기능입니다. 인라인 함수를 통해 함수 호출 및 오버헤드를 감소하는 결과를 얻을수 있으며 보통 함수에 내용이 짧을 경우 사용을 합니다. 인라인 함수가 호출되면, 인라인 함수의 전체 코드가 인라인 함수 호출 시점에 삽입되거나 대체됩니다. 3. Inline 예시 기본적인 형태로는 아래와 같습니다. inline int sum(int a, int b) { return a + b; } 이 인라인 함수를 어떻게 호출하면 기존 C++처럼 호출하면 됩니다. #include #include using namespace std; inline int sum(int a, int b) ..

C++ 17 variant

1. 개요 오늘은 C++17에 variant에 대해 알아보겠습니다. 2. variant variant는 C++17에 나온 공용체입니다. 기존의 union은 문제가 있습니다. 예를들어 기존의 union을 쓸 때, double버전으로 값을 넣고 int버전으로 사용을 한다 해도 아무런 문제 없이 작동이 되었습니다. #include using namespace std; union Union { int nValue; double dValue; }; 아무런 이상없이 컴파일이 된다. 하지만 출력값이 쓰레기값이들어간건지 이상합니다. C의 공용체는 아무런 타입 검사를 수행하지 않습니다. 이 때문에 C의 공용체는 타입 -safe하지 못한다고 합니다. 저런 출력값이 나온 이유는 아무런 조치 없이 메모리에 존재하는 비트 값을..

C++ 11 tuple

1. 개요 오늘은 C++의 tuple에 대해서 공부하겠습니다. 2. tuple? tuple은 C++11에 나온 타입중 하나 입니다. tuple(튜플)은 서로 다른 타입 즉 int double boolean등 두개 이상의 타입을 하나의 변수의 묶을수있는 기능을 가지고 있습니다. 보통 pair 키워드는 두 개만 저장할수있는 반면 tuple은 두 개 이상 저장이 가능합니다. 아래의 예시를 보겠습니다. #include #include #include using namespace std; int main() { tuple tu; tu = make_tuple(5, 5, false); cout

함수에 const 위치에 따른 결과

1. 개요 오늘은 함수에 const가 앞 뒤 매개변수일때 어떤 결과가 나오는지 알아봅시다. 2. 반환값 const 먼저 반환값 const에 대해서 알아보도록 하겠습니다. 보통 함수를 정의를 할 경우 void int double 등 여러가지의 반환 타입으로 정의합니다. 하지만 앞에 const가 붙은 함수일 경우에는 어떻게 될가요? const int sum(int a, int b) { return a + b; } 이런 형식을 가지고 있습니다. 그냥 간단합니다 반환을 상수로 반환하겠다 라는 뜻 입니다. 보통은 잘 안쓰지만 이런 경우에는 쓸수도 있습니다. const int& sum(int a, int b) { return a + b; } 이런 경우에는 참조값으로 반환이기 때문에 const를 붙여줘야합니다. 안그..