전체 글 (75) 썸네일형 리스트형 [C++/서버] Lock-2 락의 경우 서버 개발을 할 때 너무 필수적이고, 면접에서 자주 나오는 경우다. 그렇기 때문에 다양한 방식으로 Lock을 구현하는 연습은 꽤나 중요하다. 즉 우리는 이 화장실의 좌물쇠를 만드는 연습을 충실히 해보자. 내가 직장에서 일하고 있다가 직장 화장실을 갔을 때 누군가 들어갔다. 화장실 앞에서 대기하는 방법은 3가지로 요약할 수 있다. 무작정 기다린다. - 화장실 내에서 손 씻는 소리가 난단건 곧 나온다는 것이다. 그리고 자기 일터와 화장실을 왔다갔다 하는 시간은 굉장히 오래 걸리니까 그냥 계속 기다리는 방식이다. 이 방식을 컴퓨터로 하면 스핀락이라고 한다. (계속 루프를 돌면서 lock이 풀렸나 확인하는 것이다. 일단 일터로, 화장실은 다시 돌아온다. - 먼저 일자리로 돌아가서 일을 하다가 3분 정.. [C++/서버] DeadLock 보호되어 있는 글입니다. [C++/서버] Lock 결론부터 말하면, interlock이나 atomic은 기본 자료형에 대해서 효과적이고 적절한 기능이기 때문에, 컨테이너나 함수 등에서는 우리는 Lock이라는 것을 사용하여 멀티스레드 상에서 상호 배제를 구현해낼 수 있으며, 대표적인 것으로는 mutex가 있다. 하나의 벡터가 있다고 가정해보자. 즉 하나의 컨테이너가 공유자원이 되는 것이다. // FrokEngine::int32 -> __int32; std::vector v; void push() { for (size_t i = 0; i < 100000; i++) { v.push_back(i); } } int main() { std::thread t1(push); std::thread t2(push); t1.join(); t2.join(); return 0.. [C++/서버] Atomic 보호되어 있는 글입니다. [서버] 스레드 생성 보호되어 있는 글입니다. [서버] 멀티스레드 멀티스레드는 서버 입장에서는 필수적인 요소임. 문제는 멀티스레드 프로그래밍을 하는 순간부터 굉장히 많은 문제가 생김. 예로 들어 내가 타이쿤 게임을 한다고 가정하자. 그리고 한식, 일식, 그리고 좀 규모가 큰 패밀리 레스토랑이 있고, 각각 1,1,2명의 직원이 있다, 그리고 내 손은 하나고 이 직원을 한 번에 한 손으로 한 번씩 명령을 내릴 수 있다. 물론 손 빠른 사람은 이런 직원들을 마치 손이 4개인 것 처럼 움직일 수 있겠지만 만약 한 식당이 바쁘다면 다른 직원들이 관리가 되지 않을 것이다. 컴퓨터도 마찬가지이다. 다양한 프로그램을 실행하면서 그 안에서 다양한 일이 일어나게 되는데, 메모리에 올라갔다고 해서 실행되는 것이 아니라, CPU가 CPU 코어(프로세서, 손)에 각 프로세스(각 식당)의 스레.. [Windows] 핸들 테이블 결론 : 커널 오브젝트는 핸들 테이블이란 자료구조를 생성해서 핸들을 관리한다. 핸들을 인자로 취하는 함수를 호출할 땐 Create류 함수를 호출하며, 핸들을 삭제할 경우 CloseHandle 함수를 이용한다. OS는 프로세스가 초기화되면 프로세스를 위해서 커널 오브젝트 핸들 테이블을 할당한다. 이러한 핸들 테이블은 유일하게 커널 오브젝트를 의해서만 사용된다. 그리고 이 핸들 테이블의 개발 방식이나, 관리 방법 등은 어떤 구체적인 문서화가 되어있지 않다. 간단하게 이런 식으로 있겠구나 하고 넘어가셔도 된다. 이 테이블은 아래와 같은 식으로 커널 오브젝트에 대한 포인터, 액세스 마스크, 플래스로 구성된다. 인덱스 커널 오브젝트의 메모리 블록을 가리키는 포인터 액세스 마스크(각 비트별 플래그 값을 가지는 DW.. [Windows] 커널 오브젝트란? 결론 : 커널 오브젝트는 커널에 의해 생성되는 간단한 메모리 블록 커널 오브젝트는 커널에 의해 생성되는 간단한 메모리 블록이다. 그리고 윈도우 운영체제에는 이러한 커널 오브젝트가 다양하게 존재한다. (ex. 이벤트 오브젝트, 파일 오브젝트, IOCP 오브젝트 등 - 그 외 타입은 WinObj이란 툴을 통해서 확인 가능하다.) 그리고 이러한 오브젝트들은 다양한 함수를 통해서 생성된다. 이 메모리 블록은 오직 커널에 의해서만 구조체로 접근이 가능하다. 그리고 이 구조체는 보안 디스크립터, 사용 카운트(Usage Count)를 가지고 있다. 하지만 그 외 값들은 오브젝트 타입마다 굉장히 다양하다. 예로 들어, 프로세스 오브젝트의 경우는 PCB가 가지고 있어야할 Process ID, 기본 우선 순위, 종료 코드.. 이전 1 2 3 4 5 6 7 8 ··· 10 다음