블로그는 나의 힘!
[ Programing ]/Other2022. 1. 19. 23:35

# 프로젝트 & 파일 & 창 생성 및 열기

새 프로젝트 생성 
     Ctrl + Shift + N

새 파일 추가
     Ctrl + Shift + A

여러 유형(txt, html, ...)  새 파일 만들기
     Ctrl + N

현재 문서 닫기
     Ctrl + F4

기존 프로젝트 열기
     Ctrl + Shift + O

기존 파일 열기
     Ctrl + O

전체화면으로 보기
     Shift + Alt + Enter

솔루션 탐색기 열기
     Ctrl + Alt + L




# 편집 관련 단축키 (Editing)

자동 완성
     Ctrl + Space

자동 정렬하기
     Ctrl + K + F

현재 라인 복사해서 아래 라인에 붙이기
     Ctrl + D

현재 라인 잘라내기
     Ctrl + X , Ctrl + L : 현재 라인 잘라내기
     Ctrl + V : 붙이고 싶은 위치로 이동 후 복사.
     Ctrl + Shift + L : 잘라내기가 아닌 완전 삭제

네모 박스 편집, 열모드 편집
     Alt + (마우스 드래그) / Alt + Shift + ↑ (or) ↓

주석 처리
     Ctrl + K + C : 주석
     Ctrl + K + U : 주석 해제

대소문자 변환
     Ctrl + U : 소문자 변환
     Ctrl + Shift + U :  대문자 변환

함수 범위 접고, 펴기
     Ctrl + M + M





# 커서 이동 관련 단축키

현재 행 맨 앞 이동
     Home

현재 행 맨 뒤 이동
     End

현재 라인 전체 선택
     Shift + Home : 현재 커서로 부터 맨 앞까지 드래그
     Shitf + End : 현재 커서로 부터 맨 뒤까지 드래그

단위 단위로 커서 이동, 드래그
     Ctrl + ← (or) → : 단어 단위로 커서 이동
     Ctrl + Shift + ← (or) → : 단어 단위로 커서 이동 후 드래그 확장

파일 맨 처음이나 밑으로 이동
     Ctrl + Home : 파일 맨 처음으로 커서 이동
     Ctrl + End : 파일 맨 끝으로 커서 이동

특정 라인으로 이동, 행(줄) 번호 이동
     Ctrl + G

괄호 끝으로 이동
     Ctrl + ]

괄호 범위 드래그
    Ctrl + Shift + ]

줄 상하로 이동시키기
    Alt + ↑ (or) ↓

뒤로 탐색(뒤로 돌아가기), 앞으로 탐색 
    Ctrl + - : 뒤로
    Ctrl + Shift + - : 앞으로

책갈피
     Ctrl + K + K : 책갈피 등록 / 해제
     Ctrl + K + W : 책갈피 목록





# 파일 이동 / 엿보기

함수 정의문으로 이동
     F12

함수 정의문 엿보기 (Visual Studio 2017 이후)
     Alt + F12

파일로 이동
     Ctrl + Shift + G





# 검색, 찾기, 바꾸기

찾기
     Ctrl + F

바꾸기
     Ctrl + F

솔루션 및 프로젝트 전체 검색
     Ctrl + Shift + F

솔루션 및 프로젝트 전체 바꾸기
     Ctrl + Shift + H

이름 바꾸기 
: 코드 상 이름이 같아도 다른 변수 일때 유용.
  대표적 함수 인자와 코드와 같은 변수 이름 일때
     Ctrl + R + R

모두 찾아 실행 (Visual Studio 2019 이후)
: 글자나 단어가 아닌 기능을 검색.
     Ctrl + Q




# 빌드, 컴파일, 디버깅 단축키

솔루션 빌드
     Ctrl + Shift + B

디버깅 하지 않고 시작
     Ctrl + F5

디버깅
     F5 : 디버깅 시작
     Shift + F5 : 디버깅 중지

디버깅 줄 단위 실행
     F10 : 줄 단위 실행 (Step Over)
     F11 : 줄 단위 실행 + 함수 도입부(호출부)를 만나면 내부 진입 (Step Into)

조사식 확인
: 실제 값이 어떻게 들어가는지 실시간으로 확인할 수 있는 조사식 열어 주는 단축키
     Shift + F9




# 그 외 단축키

전체 선택
     Ctrl + A

모든 참조 찾기 (Visual Studio 2017 이후)
: 커서를 두고 해당 단축키를 누르면 어디서 참조 되었는지 정리하여 보여줌.
     Shift + F12

함수 정의부(몸체) 자동 완성 (리펙토링)
: 함수 선언부만 있다면 함수에 커서를 두고 단축키 입력 시 정의부 자동 작성.
     Alt + Enter / Ctrl + .

헤더파일 자동 삽입 (리펙토링)
: 해당 코드에 커서를 두고 단축키 입력 시 헤더파일/라이브러리(include) 자동 삽입.
     Alt + Enter / Ctrl + .

코드 감싸기
: 해당 코드를 블럭 처리 한 후 단축키 입력 시 if() { 코드 } 
     Ctrl + K + S





 

링크 : 자주 사용하는 비주얼스튜디오 단축키 정리 (Visual Studio shortcuts) (tistory.com)

 

자주 사용하는 비주얼스튜디오 단축키 정리 (Visual Studio shortcuts)

[C/C++ 프로그래밍 강좌 목차] Visual Studio 단축키 알아보기 안녕하세요 여러분들 ㅎㅎ 오늘은 개발환경 비주얼스튜디오 단축키에 대해 알아보려고 합니다. 단축키를 커스터마이징해서 사용할 수

jhnyang.tistory.com




 

'[ Programing ] > Other' 카테고리의 다른 글

JSON 유효성 검사기  (0) 2022.02.07
코드 비교 체크. diffchecker  (0) 2022.01.25
QTTabBar 탭바 있는 윈도우 탐색기  (0) 2022.01.13
하드 드라이브 용량 확인 할때.  (0) 2021.10.15
Windows Event Viewer  (0) 2021.10.15
Posted by Mister_Q
[ Programing ]/Server2022. 1. 19. 12:16

정의 
프로그램
- 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태.

프로세스
 - 운영체제로부터 자원을 할당받은 작업의 단위.

스레드
 - 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.




프로그램이라는 단어는 아직 실행되지 않은 파일 그 자체를 가리키는 말이다. 
윈도우의 *.exe 파일이나 MacOS의 *.dmg 파일 등등 사용자가 눌러서 실행하기 전의 파일을 말한다. 
쉽게 말해서 그냥 코드 덩어리다.

그러면 이제 그 실행 파일(프로그램)에게 의미를 부여하기 위해 프로그램을 실행해 보자. 
프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 
이 상태를 동적(動的)인 상태라고 하며 이 상태의 프로그램을 프로세스라고 한다



과거에는 프로그램을 실행할 때 실행 시작부터 끝까지 프로세스 하나만을 사용해서 진행했다. 
하지만 시간이 흐를수록 프로그램이 복잡해지고 프로세스 하나 사용해 프로그램 실행하기는 벅차게 되었다. 
실제로 이제는 프로그램 하나가 단순히 한 가지 작업만을 하는 경우는 없다. 
그러면 이제 어떻게 해야할까?

쉽게 떠오르는 방법은, 
"한 프로그램을 처리하기 위한 프로세스를 여러 개 만들면 되지 않을까?" 
생각이 들지만 이는 불가능한 일이었다. 
왜냐하면 운영체제는 안전성을 위해서 프로세스마다 
자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 
이를 벗어나는 정보에 접근하려면 오류가 발생하기 때문이다.

그래서 프로세스와는 다른 더 작은 실행 단위 개념이 필요하게 되었고, 이 개념이 바로 스레드다.
스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로다.




프로세스가 메모리에 올라갈 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, 
Code/Data/Stack/Heap의 형식으로 할당해 준다. 
각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

이와 다르게 스레드는 메모리를 서로 공유할 수 있다.
프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 
나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다.
각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

여기서 프로세스와 스레드의 중요한 차이를 하나 더 알 수 있게 된다. 
만약 한 프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면, 
다른 프로세스에게 어떤 영향이 있을까? 

공유하고 있는 파일을 손상시키는 경우가 아니라면 프로세스는 아무런 영향을 주지 않는다.
그런데 스레드의 경우는 다르다.
스레드는 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 
어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.

하나의 프로세스는 하나 이상의 스레드를 가진다는 점이다. 
따라서 운영체제 관점에서는 프로세스가 최소 작업 단위인데, 
이 때문에 같은 프로세스 소속의 스레드끼리 메모리를 공유하지 않을 수 없다.



그 외,   
멀티태스킹 : 하나의 운영 체제 안에서 여러 프로세스가 실행되는 것.
멀티스레드 : 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것을 의미.

멀티스레드의 장점
Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
스레드는 프로세스 내 Stack 영역을 제외한 모든 메모리를 공유하기에 통신 부담이 적어 응답 시간이 빠르다.

멀티스레드의 단점
스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.




동기화 문제
멀티스레드의 장단점에서 꼭 짚고 넘어가야 할 점이 바로 동기화 문제다. 
주로 Synchronization Issue라고 하는데, 이에 대해 자세히 설명하면 다음과 같다.

멀티스레드를 사용하면 각각의 스레드 중 어떤 것이 어떤 순서로 실행될 지 그 순서를 알 수 없다. 
만약 A 스레드가 어떤 자원을 사용하다가 B 스레드로 제어권 넘어간 후 
B 스레드가 해당 자원을 수정했을 때, 다시 제어권을 받은 A 스레드가 
해당 자원에 접근하지 못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.

이처럼 여러 스레드가 함께 전역 변수를 사용할 경우 발생할 수 있는 충돌을 동기화 문제라고 한다. 
스케줄링은 운영체제가 자동으로 해주지 않기 때문에 
프로그래머가 직접 구현해야 하므로 프로그래밍할 때 멀티스레드 사용하려면 신중해야 한다. 
디버깅 과정도 까다로워지기 때문이다.




사실 프로세스가 다른 프로세스의 정보에 접근하는 것이 가능하다. 
지금 사용하는 대부분의 컴퓨터 프로그램을 생각해 보면 
다른 프로그램에 있는 정보를 가져오는 경우는 심심치 않게 볼 수 있다.

프로세스 간 정보를 공유하는 방법에는 다음과 같은 방법들이 있다. 
다만 이 경우에는 단순히 CPU 레지스터 교체뿐만이 아니라 
RAM과 CPU 사이의 캐시 메모리까지 초기화되기 때문에 앞서 말했듯 자원 부담이 크다.

다른 프로세스 접근 방법
- IPC(Inter-Process Communication)을 사용한다.
- LPC(Local inter-Process Communication)을 사용한다.
- 별도로 공유 메모리를 만들어서 정보를 주고받도록 설정해주면 된다.




운영체제가 프로세스에게 Code/Data/Stack/Heap 메모리 영역을 할당해 주고 최소 작업 단위로 삼는 반면, 
스레드는 프로세스 내 Stack 메모리 영역을 제외한 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유한다.

프로세스는 다른 프로세스와 정보를 공유하려면 IPC를 사용하는 등의 번거로운 과정을 거쳐야 하지만, 
스레드는 기본 구조 자체가 메모리를 공유하는 구조이기 때문에 다른 스레드와 정보 공유가 쉽다. 
때문에 멀티태스킹보다 멀티스레드가 자원을 아낄 수 있게 된다. 

다만 스레드의 스케줄링은 운영체제가 처리하지 않기에 프로그래머가 직접 동기화 문제에 대응할 수 있어야 한다.




출처 : 
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

프로세스와 스레드의 차이

프로세스와 스레드의 차이는 프로세스와 스레드, 그리고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 확인하기 위해 기술면접에서 단골 질문 사항으로 나온다.

velog.io



 

Posted by Mister_Q
[ Programing ]/Interview2022. 1. 19. 11:50

# 쓰레드 동기화

1. 실행순서의 동기화와 메모리 접근에 대한 동기화가 있다.
- 실행순서의 동기화는 쓰레드의 실행순서를 정의하고, 이 순서에 반드시 따르도록 하 것이 쓰레드 동기화 이다.
- 메모리 접근에 대한 동기화는 메모리 접근에 있어서 동시접근을 막는 것 또한 쓰레드의 동기화에 해당한다.


2. Windows에서 제공하는 동기화 기법은 제공하는 주체에 따라 크게 두 가지로 나눈다.

유저모드 동기화
동기화가 진행되는 과정에서 커널의 힘을 빌리지 않는 동기화 기법이다.
따라서 동기화를 위해서 커널 모드로의 전환이 불필요하기 때문에 성능상에 이점이 있다.
그만큼 기능상의 제한도 있다.

커널 모드 동기화
커널에서 제공하는 동기화 기능을 활용하는 방법이다.
따라서 동기화에 관련된 함수가 호출될 때마다 커널 모드로의 변경이 필요하고, 이는 성능의 저하로 이어지게 된다.
하지만 그만큼 유저 모드 동기화에서 제공하지 못하는 기능을 제공받을 수 있다.





# 임계영역 접근 동기화

임계 영역(Critical Section)이란 
배타적 접근(한 순간에 하나의 쓰레드만 접근)이 요구되는 공유 리소스에 접근하는 코드 블록을 의미한다.

* 이름있는 뮤텍스 기반의 동기화는 프로세스 동기화에 필요
* 이벤트 기반의 동기화는 실행순서 동기화에 필요.
* 크리티컬 섹션, 인터락 함수, 뮤텍스, 세마포어는 메모리 접근 동기화에 필요





# 유저 모드의 동기화

크리티컬 섹션 기반의 동기화

* 화장실에 들어가기 전 열쇠로 문을 열고 들어가고, 나와서는 다른 사람을 위해 화장실 앞에 열쇠를 둔다.
  이것이 크리티컬 섹션 동기화 방식이다.
  핵심은 열쇠를 얻은 자만이 화장실에 들어갈 수 있다는 것이다.

*  크리티컬 섹션 기반의 동기화를 사용하려면?
  크리티컬 섹션 오브젝트(자료형이 CRITICAL_SECTION인 변수)라는 것을 만들고 초기화해야 한다.
  CRITICAL_SECTION g_CriticalSection
  - 선언한 후 이걸 통해 초기화 과정을 거쳐야 한다.

*  초기화 과정을 통해 크리티컬 섹션 오브젝트는 사용 가능한 상태가 된다.
   void InintializeCriticalSection ( LPCRITICAL_SECTION  IpCriticalSection )
    - 1. IpCriticalSection 
         : 초기화 하고자 하는 크리티컬 섹션 오브젝트의 주소값을 인자로 전달한다.

* 위와 같이 열쇠를 만들었다면, 다음으론 열쇠를 획득하는 행위, 또 열쇠를 돌려놓는 행위를 해야한다.
   void EnterCriticalSection ( 1 )
   - 1. LPCRITICAL_SECTION IpCriticalSection
        : 임계영역에 진입하기 위해 필요한 크리티컬 섹션 오브젝트의 주소값을 인자로 전달. 
         누군가(다른 쓰레드)에 의해 이미 이 함수가 호출된 상태라면, 호출된 함수는 블로킹 된다. 
         그리고 열쇠가 반환되면 블로킹 상태에 있던 함수는 빠져나온다. 
         이 함수 호출하고 임계영역으로 들어갔을 때 이를 호출한 쓰레드가 크리티컬 섹션을 얻었다고 표현한다.
   void LeaveCriticalSection ( 1 )
   - 1. LPCRITICAL_SECTION IpCriticalSection
        : 임계영역을 빠져 나오고 나서 호출하는 함수. 
         화장실에 열쇠를 다시 걸어놓는 함수. 
         만약 EnterCriticalSection을 호출한 뒤 블로킹 상태에 놓인 쓰레드가 있다면, 
         이 함수 호출로 인해 블로킹 상태에서 빠져나와 임계영역으로 진입하게 된다. 
         호출이 완료되었을 때, 
         이를 호출한 쓰레드가 크리티컬 섹션 오브젝트를 반환했다고 표현한다.

* 끝으로 초기화 함수 호출 과정에서 할당되었던 리소스를 반환해야 한다.
   void DeleteCriticalSection ( 1 )
   - 1. LPCRITICAL_SECTION IpCriticalSection
        : 반환하고자 하는 크리티컬 섹션 오브젝트의 주소값을 인자로 전달한다.






# 인터락 함수 기반의 동기화

* 인터락 함수는 함수 내부적으로 한 순간에 하나의 쓰레드에 의해서만 실행되도록 동기화 됨.

* 유저 모드 기반으로 동작
* InterlockedIncrement 함수는 둘 이상 쓰레드가 공유하는 메모리에 저장 값을,   
  이 함수를 통해 증가시킬 경우 동기화된 상태에서 접근하는 것과 동일한 안정성을 보장.

* InterlockedDecrement 함수는 둘 이상 쓰레드가 공유하는 메모리에 저장 값을, 
   이 함수를 통해 감소시킬 경우 동기화된 상태에서 접근하는 것과 동일한 안정성을 보장.

* 크리티컬 섹션 동기화 기법도 내부적으로 인터락 함수를 기반으로 구현됨.

* 전달인자가 volatile로 선언되어 있어서 포인터를 이용해 함수 내부적으로 최적화를 수행하지 않으며, 
  해당 포인터가 가리키는 메모리 영역을 캐쉬하지 않는다.




# 커널 모드의 동기화

Windows 커널 레벨에서 제공해 주는 동기화 기법이기 때문에, 유저 모드 동기화가
제공해 주지 못하는 기능을 제공받을 수 있다.


뮤텍스 기반

* 보안 설정 부분은 프로세스와 마찬가지로 커널 오브젝트이기 때문에 새로운 프로세스 생성 시
  핸들을 상속해 줄 것이냐, 말 것이냐를 결정하 데 있어서 이 전달인자를 활용.
  뮤텍스 라는 열쇠를 생성하는 함수.

* 소유자 지정 부분은 크리티컬 섹션처럼 먼저 차지하는 사람이 임자가 되게 할 수 있고(FALSE)
  뮤텍스를 생성하는 쓰레드가 먼저 기회를 얻을 수도 있다.(TRUE)

* 반환 타입은 HANDLE이다. 
  반환 타입이 HANDLE이라는 것은 뮤텍스가 커널 오브젝트임을 말하는 것이다.

* 커널 오브젝트는 상태를 지니는데, 그 하나는 Signaled 상태이고, 다른 하나는 Non-Signaled 상태이다.

* 보통 커널 오브젝트는 Non-Signaled 상태에 놓여 있다가, 특정 상황이 되면 Signaled 상태가 된다.

* 뮤텍스는 누군가가 열쇠를 취득했을 때 Non-Signaled 상태가 되고, 
  취득한 열쇠를 반환했을 때 Signaled 상태가 된다.

* WaitForSingleObject 함수는 커널 오브젝트가 Siganled 상태가 되어 반환될 경우, 
  해당 커널 오브젝트의 상태를 Non-Signaled 상태로 변경하므로, 
  다른 쓰레드들은 임계 영역으로의 진입이 제한된다.

* ReleaseMutex 함수는 임계 영역에서 일을 마친 쓰레드가 반환할때 호출한다.
  즉 Signaled 상태가 되어서 다른 쓰레드의 진입을 허용한다.



세마포어 기반

* LPSECURITY_ATTRIBUTES 보안 설정 부분은 프로세스와 마찬가지로 
  커널 오브젝트이기 때문에 새로운 프로세스 생성 시 핸들을 
  상속해 줄 것이냐, 말 것이냐를 결정하데 있어서 이 전달인자를 활용.

* InitialCount는 세마포어는 값을 지니는데, 이 값을 기반으로 임계 영역에 접근 가능한 쓰레드의 개수를 제한한다.

* lMaximumCount 세마포어가 지닐 수 있는 값의 최대 크기를 지정한다.
  이 값이 1이 될 경우 뮤텍스와 동일한 기능하는 바이너리 세마포어가 구성된다.

* 세마포어가 생성될 때 전달인자에 의해 초기 카운트가 결정.

* 카운트가 0인 경우 Non-Signaled 상태에 놓이게 되며, 1 이상인 경우 Signaled 상태에 있게 된다.

* WaitForSingleObject 함수를 호출할 경우, 카운트가 하니씩 감소하면서 함수를 반환한다.
  - 초기 카운트가 10이면 WaitForSingleObject 함수가 총 열 번 호출될 때까지 블로킹이 되지 않고
    열한 번째 호출 시 세마포어 카운트가 0인 관계로 블로킹 상태가 된다.

* 초기 카운트가 1이면 뮤텍스와 동일하게 돌아간다.



이름있는 뮤텍스 기반의 프로세스 동기화

* 서로 다른 프로세스 영역에 존재하는 쓰레드가 뮤텍스를 이용해서 동기화되고 있는 상황.

* 뮤텍스는 커널 오브젝이트므로,
 
프로세스 A의 요청에 의해서 생성되었다고 해서 프로세스 A의 영역에 존재하는 것이 아니다. 
  커널이 관리하는 오브젝트이므로 프로세스 B도 접근이 가능하다.

* 핸들 테이블은 커널 오브젝트와 이를 지칭하는 핸들값에 대한 정보를 담고 있는 테이블인데, 
  이는 각각의 프로세스별로 독립적이다. (핸들 값이 동일해도 독립적이기 때문에 접근 불가능)

* 뮤텍스 이름을 붙여줘서 프로세스 별로 커널 오브젝트에 접근 가능한 핸들 정보를 얻을 수 있다.



뮤텍스의 소유와 WAIT_ABANDONED

* 두 개의 쓰레드 A, B와 동기화 오브젝트인 뮤텍스 C가 존재한다면 쓰레드 A가 뮤텍스 C를 획득했다.
  그리고 쓰레드 B는 쓰레드 A가 뮤텍스를 반환하기를 기다린다.
  그런데, 갑자기 쓰레드 A가 종료되어 버렸다.
  뮤텍스를 반환하지도 않고 사라져버린 것이다. 이제 Windows는 이러한 상황을 파악한다. 
  Windows는 쓰레드의 상태와 뮤텍스의 상태를 예의 주시하기 때문에 
  이러한 문제가 발생했음을 인지하고 더 이상 정상적인 방법으로 반환이 불가능한 뮤텍스를 대신 반환해주고, 
  다음 대기자인 쓰레드가 B가 뮤텍스를 소유할 수 있도록 도와준다.
  이때 쓰레드 B는 WAIT_ABANDONED 값을 반환받게 된다.





참고 및 출처 : 

https://blog.naver.com/ya3344/222427414380

 

쓰레드 동기화 기법(메모리 접근에 대한 동기화)

쓰레드 동기화 1. 실행순서의 동기화와 메모리 접근에 대한 동기화가 있다. - 실행순서의 동기화는 쓰레드...

blog.naver.com

https://8iggy.tistory.com/184?category=1023741 

 

기술면접을 위한 OS 개념정리 04 - 프로세스 동기화, 데드락

읽기 전 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다. 개인적으로 사용해보면서 배운 점을 정리한 글입니다. 기술면접만을 준비하기보다 비전공자 입장에서 OS의 기본

8iggy.tistory.com

[13. 쓰레드 동기화 기법] :: 어떤 프로그래머 (tistory.com) 

 

[13. 쓰레드 동기화 기법]

* 이 내용은 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책의 내용을 정리한 것 입니다. 쓰레드 동기화란 무엇인가? 두 가지 관점에서의 쓰레드 동기화 여기서 말하는 동기화는, 순서에 있어서

popcorntree.tistory.com



 

Posted by Mister_Q