목록전체 글 (123)
Written by coh at home
클래스 공부하는 내용. #include class Dog { private: std::string mName; int age; public: //const를 붙여서 강건성을 높임. 객체의 상태는 메소드를 통해서만 수정되어야함 const std::string& getName() { return mName; } void setName(const std::string& name) { mName = name; } std::string& bark() { return mName + ": " + "멍멍"; } }; int main() { Dog dog1; dog1.setName("건강"); //std::cout
c++에서는 c에서 쓰던 문법들을 모두 지원합니다. 따라서 다음과 같은 형식으로도 사용이 가능합니다. char a[6]{"hello"}; char *a = "cheol5"; 그렇지만 c++은 객체지향언어이기 때문에 문자열을 처리하는 클래스타입을 지원합니다. std::string name{"cheolho"}; name 변수는 이제 원래 c에서의 배열처럼 변경가능합니다. 단 전통적인 c에서는 문자열의 끝을 '\n'로 지정해주었는데 std::string에서는 null character를 이용하면 안 됩니다. 이제부터 널문자는 더 이상 문자열의 끝을 나타내는 것이 아니기 때문입니다. 문자열 갯수를 파악하기 위해서 메소드로 .size or .length를 지원합니다. #include using namespace ..
배열의 용량은 컴파일 시간에 결정됩니다. 음.. c도 마찬가지인데 하여튼 그래서 배열 size를 변수로 설정하는 것이 허용이 안 되었었죠. 그래서 동적메모리 할당으로 이를 해결했습니다. 기억 나나요? int* abc{new int[20]} //동적배열선언 int n[5]{}; //모두 0으로 초기화 c++11부터 이렇게 하는 겁니다. in place로 짜라고 하는데 흠.. 걍 우선 추가공간을 확보해서 만드는 것을 생각해본다음 in place로 바꿔볼게요. void removeDuplicates(int list[], int size){ int* temp{new int[size]}; temp[0]=list[0]; int j=1; for(int i=1;i
spinlock에서의 Busy waiting을 해결해봅시다. Dijkstra님이 제안해서 이 문제점을 해결하게 됩니다. Semaphore는 음이아닌 정수형 변수인데 spinlock과 마찬가지로 초기화, P(), V()연산만 가능합니다. p()는 들어가기 전 검사 v()는 물건 돌려놓는 것으로 똑같습니다. Semaphore는 차단기라는 뜻인데 들어가기 전 검사하는 게 p() 나오면서 여는 게 v()로 비유할 수 있겠습니다. 그러면 spinlock이랑 똑같은 거 아냐? 음.. 다른 점은 임의의 변수 s 하나에 ready queue가 할당 된다는 점이 다릅니다. Semaphore는 두 종류가 있는데 하나는 Binary로 0,1을 갖는 것이 있고 Counting으로 음이 아닌 정수를 갖는 종류가 있습니다. 각각..
HW solution에서 TestAndSet instruction인 기계어를 만들어줘서 실행 중 preemption되지 않는 것을 보장해 준다. 핵심 문장은 TAS함수를 이욯하는 건데 while(TAS(lock)) do 에서 초기 lock = false이면 첫 번째 프로세스가 일을 하는 동안 두 번째 프로세스가 도착해도 while문을 계속 돌게 된다. 첫 번째 프로세스가 일을 끝내고 lock을 false상태로 만들어주면 두 번째 프로세스가 CS에 진입해서 일을 하게 됨. 근데... 프로세스가 3개 이상이면 BW조건을 위배하게 된다. 자.. 1번이 일을 하고있고 2,3번이 뺑뺑 돌고 있다면 1번이 일을 끝내고 false가 되면 둘 중 3번이 들어온다고 해보자. 4번이 새로 while 루프로 들어와서 2,4..