비동기 병행 실행3
Test-and-Set
일정횟수동안만 대기 = 한정대기(bounded waiting)
n-1번 양보하고 들어간다
CAS(Compare and Exchange / Compare and Swap)
Itanium구조는 multicore이다
interrupt는 instruction이 끝나고 다른 instruction시작되기 전에 발생함
lock cmpxchg
이 순간에는 메모리 접근 한 번만 하게 한다
코어가 여러개있을때도 atomic하게 실행하게한다
CISC(복잡한 INSTRUCTION SET) -> CAS힘듬
RISC(단순한 INSTRUCTION SET)
0,0,1
0==0이니까
lock이 1들어감
CAS false되니까
임계구역들어감
CAS 명령어를 사용한 경쟁조건 회피
다르면 false 같으면 true
while(CAS(&shared, temp, shaed+1)
temp=shared;
shared temp
멀티쓰레드프로그램하면
여러녀석이 메모리를 공유하기때문에
예기치않은 문제생기고
배타적인 접근은
임계구역에 해당하는 부분에
코드를 작성해주어야한다
세마변수
두 개의 원자적 함수로 조작되는 정수 변수
P연산 / wait연산 0이면 대기, 1이면 0뺴주고 임계구역 드렁감
V연산 / signal연산 0이면 1더해줌
valueproduced(0)
valueproduced(1) -> v연산
생산자
임계구역x 동기화
계수 세마포어
write할땐
read,write못함
read할땐
read는가능,write는못함
v p v p
java
acquire p연산
release v연산
모니터
synchronized
동시에 한 개의 메소드만 사용될수있다