問題一覧
1
실제 메모리로 wait-free를 유지하면서 atomic memory를 만들 수 있는 알고리즘이 존재하는가? ( O / X )
O
2
기존의 싱글스레드 자료구조도 wait-free를 유지하면서 atomic memory를 사용해서 멀티스레드 자료구조로 변환하는 것이 가능한가? ( O / X )
X
3
일반적인 자료구조를 wait-free를 유지하면서 멀티스레드 자료구조로 변환하려면 atomic memory말고 무엇이 더 필요한가?
CompareAndSet() 연산이면 충분하다. CAS
4
스레드끼리의 동기화는 ( )을 통해서 이루어 진다.
동기화 연산
5
동기화 연산은 ( )로 구현되어 있어야 한다.
wait-free
6
bool 메모리::CAS(expected, update)는 어떻게 동작하는가?
메모리의 값이 expected와 같으면 update로 값을 바꾸고 true 반환. 메모리의 값이 expected와 다르면 false 반환.
7
소프트웨어적으로 cas를 구현할 방법이 있는가? ( O / X )
X
8
CAS는 atomic load/store로 구현이 가능한가? ( O / X )
X
9
모든 기존 자료구조를 wait-free multithread로 변환해 주는 알고리즘은 존재하지 않는다. ( O / X )
X
10
이것은 무슨 코드인가?
모든 기존 자료구조를 Lock-free multithread로 변환해주는 알고리즘
11
지워진 곳에 위에서부터 알맞은 코드를 넣으시오.
r.CAS(FIRST, i) decide(&prefer) SeqObject myObject;
12
이 알고리즘을 사용하지 못하는 이유는?
오버헤드가 너무 커서 성능이 너무 안좋다.
13
CPU가 제공하는 CAS를 사용하면 모든 싱글스레드 알고리즘을 lock-free한 멀티스레드 알고리즘으로 변환할 수 있다. ( O / X )
O
14
멀티스레드 알고리즘은 범용적일 수록 성능이 떨어진다. ( O / X )
O
15
Data Race는 ( ) 떄문에 발생한다.
공유 객체
16
빈칸에 들어갈 것은?
atomic_int
17
빈칸에 들어갈 것은?
volatile atomic_int *
18
한 줄인데 왜 함수를 만들어서 사용하는가?
call by reference로 사용하기 위해서이다. 밖에 CAS 함수는 실패한 것만 알고 안에 있는 atomic_compare_exchange_strong은 왜 실패했는지도 알 수 있다.
19
여기서 CAS_LOCK()과 CAS_UNLOCK()에 들어갈 것은?
CAS_LOCK(): while (false == CAS(&LOCK, 0, 1)); CAS_UNLOCK(): LOCK = 0;
20
convoying이 의심되면 ( )를 사용하면 된다.
yield()