전체보기
JAVA 병렬 프로그래밍 [5] - 화장실 스케쥴링
조건 화장실의 칸은 n개 이며, m명의 사람들이 급한 볼 일을 보기 위해 대기한다. 이를 이용하는 사람마다 이용 시간은 최소 1분에서 10분까지 걸린다. 화장실을 대기하는 사람들을 공평하고 안전하게 볼 일을 보고 나갈 수 있도록 시뮬레이터를 작성 처리 조건 화장실 칸 수는 실행 전에 인수로 받도록 하고 각 화장실을 스레드로 구현하도록 한다. 대기 하는 사람은 실행전 인수로 받도록 하고 랜덤 함수에 의하여 생성하도록 한다. 실행을 빨리 돌려야 하므로 1분을 1초로 환산하여 처리하도록 한다. 아래의 예와 같이 1분 단위로 상태 변화를 출력하여 스케줄링 상태를 확인할 수 있도록 한다. 최초 대기열 : [ 1 ( 7 / 7 ) ] [ 2 ( 10 / 10 ) ] [ 3 ( 8 / 8 ) ] [ 4 ( 9 / 9..
JAVA 병렬 프로그래밍 [4] - Sharing Objects ( 객체 공유 )
병렬 프로그램 작성은 상태가 바뀔 수 있는 내용을 어떻게 잘 공유해 사용하도록 관리하는 지에 대한 문제라고 했다. 여러 개 스레드에서 특정 객체를 동시에 사용하려 할 때 안전하게 동작하도록 객체를 공유하고 공개해야 한다. 1. 가시성 - 메모리 가시성 : 한 스레드에서 변경한 특정 메모리 값이 다른 스레드에서 제대로 읽어지는지 - 가시성 보장 : mutex , critical section을 사용하여 memory barrier를 만든다. ! mutex , semaphore 란? 뮤텍스란 MUTual EXclusion으로 상호배제 를 뜻한다. Critical Section는 프로그램 상에서 동시에 실행될 경우 문제를 일으킬 수 있는 부분을 지칭한다. 그런 부분을 가진 스레드들의 동작시간이 서로 겹치지 않게..
JAVA 병렬 프로그래밍 [3] - 멀티 스레드로 1-100까지의 합 구하기
이번엔 스레드 10개를 이용해서 1-100까지의 합을 구하는 구현을 해보려고 한다. 결과물 [pool-1-thread-1 ] n = 2, sum = 3 [pool-1-thread-10 ] n = 10, sum = 55 [pool-1-thread-9 ] n = 9, sum = 45 [pool-1-thread-8 ] n = 8, sum = 36 [pool-1-thread-2 ] n = 5, sum = 15 [pool-1-thread-3 ] n = 1, sum = 1 [pool-1-thread-5 ] n = 4, sum = 10 [pool-1-thread-7 ] n = 7, sum = 28 [pool-1-thread-6 ] n = 6, sum = 21 [pool-1-thread-4 ] n = 3, sum = ..
JAVA 병렬 프로그래밍 [2] - Thread Safety
병렬 프로그래밍이란? 공유되고 변경할 수 있는 상태에 대한 접근 관리를 하는 것이다. 공유 : 여러 스레드가 특정 변수에 접근 할 수 있고 변경 할 수 있다는 의미 이러한 접근 관리에는 스레드 안정성이 필요하다. 스레드 안정성 - 데이터 제어 없이 동시접근을 막음을 의미 - 객체가 스레드에 안전해야 하느냐는 해당 객체에 여러 스레드의 접근여부에 달렸다. - 스레드가 하나 이상의 상태 변수에 접근하고 그 중 하나 이상의 변수에 값을 쓰면 , 해당 변수에 접근 할 때 관련된 모든 스레드가 동기화 조율 대상 JAVA의 동기화 수단 - synchronized 키워드 - volatile, 명시적인 lock, 단일 연산 변수(atomic variable) ! 여러 스레드가 변경 할 수 있는 상태 변수를 적절한 동기..