병렬 프로그래밍 3

병행 객체의 동작에 관한 개념

*용어 정리병행 객체: 여러 스레드에서 함께 read&write하는 공유 객체로, 서로 다른 스레드에서 동시에 접근했을 때 발생하는 문제점을 아래 개념들에서 논리적으로 다룬다. 스레드가 병행객체를 read/write하는 방법은 함수를 호출하는 것이다. 함수 호출을 호출 시작+이벤트+응답 이벤트 세 부분으로 나눌 수 있다. 완전(total)인 함수와 부분(partial)인 함수: 전자는 FIFO 큐에 객체를 삽입하는 enqueue 함수처럼 조건 없이 항상 실행할 수 있는 함수이고 후자는 dequeue 함수처럼 큐 내부의 객체 수가 0이면 안된다는 조건이 있어서 항상 실행할 수는 없는 함수를 말한다.   1. 정지 무모순성 정지 무모순성이란, 객체가 아무 스레드도 함수를 호출하지 않는 정지(quiescent..

스레드 잠금 알고리즘2(필터 잠금, 램포트 잠금 알고리즘)

*용어 정리lock 메서드 내부는 진입영역과 대기영역으로 나눌 수 있다.진입영역(doorway): 유한한 단계로 되어 있다.(while문을 제외한 부분)대기영역(waiting): 무한한 단계를 밟을 수도 있다.(while문 부분) 1. 필터 잠금 알고리즘: Peterson 알고리즘은 스레드 2개에 대한 상호배제(mutual exclusion) 알고리즘-> 스레드 n개로 확장한 알고리즘Peterson 알고리즘처럼 상호배제와 무기아조건을 만족한다.스레드 n개 존재 시level[]: 길이 n인 배열로, level[i]는 i번 스레드의 현재 레벨을 기록한다.->이 배열은 0번 스레드부터 (n-1)번 스레드까지 각 스레드의 현재 시점의 레벨을 알려준다.victim[]: 길이 n인 배열로, victim[i]는 i ..

스레드 잠금 알고리즘 1(Lock One, Lock Two, Peterson)

*용어정리2개 이상의 스레드가 병렬적으로 작동하는 멀티스레딩 프로그램에서는 공유자원에 대해 서로 다른 스레드가 접근할 때 세 가지의 조건을 만족하도록 프로그래밍하는 것이 가장 이상적이다.(예외도 물론 존재)1)상호배제: 서로 다른 스레드가 자신만의 작업을 수행하는 코드블럭인, 임계영역은 그것이 수행되는 시간 범위가 서로 겹치지 않는다. CS_A->CS_B 또는 CS_B->CS_A 여야 한다. 2)무교착 상태: 두 스레드가 모두 공유자원에 접근하려 한다면 적어도 하나의 스레드는 lock 상태를 얻고 접근할 수 있어야 한다.3)무기아 상태: 하나의 스레드만 공유자원에 접근하고 다른 스레드가 공유자원에 접근하는 것이 불가능한 경우는 없어야 한다. -교착상태: 스레드가 서로 자원에 접근하기를 기다려서 실행되지 ..