일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 영속성
- DirectX12
- 운영체제
- DirectX 12
- 디자인패턴
- 컨디션 변수
- 멀티프로세서
- 동적계획법
- 다이나믹프로그래밍
- 그리디알고리즘
- directx
- 그리디 알고리즘
- 백준
- 자료구조
- 병행성 관련 오류
- 알고리즘
- OS
- 다이나믹 프로그래밍
- 렌더링 파이프라인
- 락
- 쓰레드
- I/O장치
- codility
- 파일시스템 구현
- Direct12
- 스케줄링
- 프로그래머스
- 병행성
- 타입 객체
- 멀티쓰레드
- Today
- Total
목록멀티프로세서 (2)
기록공간

위에서 살펴봤듯 멀티 프로세서에서는 인터럽트를 중지시키는 것이 의미가 없기 때문에 시스템 설계자들은 락 지원을 위한 하드웨어 설계를 하기 시작했다. 오늘날 모든 시스템들은 하드웨어 지원 기능을 가지고 있으며, 단일 CPU 시스템 또한 이런 기능이 존재한다. Test-And-Set (Atomic Exchange) 하드웨어 기법 중 가장 기본은 Test-And-Set 명령어 또는 원자적 교체(atomic exchange) 라고 불리는 기법이다. Test-And-Set 명령어를 사용하면 락을 간단하게 구현할 수 있다. ptr이 가리키는 이전 값을 old로 받아 리턴(TEST)한다. 동시에 그 값을 new로 바꾼다(SET). 이 동작은 원자적으로 수행되어야 하며 중간에 인터럽트 될 수 없다. 때문에, 소프트웨어..

여러 개의 명령어들을 원자적(atomic)으로 실행해보고 싶지만 병행성으로 인한 여러 쓰레드의 개입으로 인해(임계영역) 그렇게 할 수가 없었다. 여기서는 앞서 다룬 락(lock)을 이용하여 이 문제를 직접적으로 다루고자 한다. 프로그래머들은 소스 코드의 임계 영역을 락으로 둘러 그 임계 영역이 하나의 원자 단위 명령어인 것처럼 실행되도록 한다. 락 : 기본 개념 예를 위해 다음의 임계 영역이 있다고 하자. 공유 변수의 갱신이다. balance = balance + 1; 그리고 락으로 임계 영역을 다음과 같이 감쌌다. mutex mylock; // 전역 변수로 선언된 mylock ... mylock.lock(); balance = balance + 1; mylock.unlock(); 락은 하나의 변수이므로..