임계구역3 [운영체제] 동기화 예제 1) 생산자-소비자 문제 1. 생산자-소비자 문제 Bounded Buffer Problem1) 생산자-소비자 문제생산자 프로세스가 데이터를 생산하면 소비자 프로세스는 그것을 소비한다.-> 버퍼는 생산자와 소비자가 모두 접근하는 임계 구역인 셈이다.-> 세마포어를 사용해서 상호 배제로 문제를 해결할 수 있다.예) 컴파일러(생산) > 어셈블러(소비), 파일 서버(생산) > 클라이언트(소비), 웹 서버(생산) > 웹 클라이언트(서버) (1) Bounded Buffer생산된 데이터는 버퍼에 저장한다.(속도 차이 등 때문에)현실 시스템에서 버퍼 크기는 유한하다. (bounded : 한계가 있는)생산자는 버퍼가 가득 차면 더 넣을 수 없다.소비자는 버퍼가 비면 뺄 수 없다. 2) 예제 코드Producer는 버퍼에 10,000개 아이템을 .. 2024. 12. 11. [운영체제] 5. 은행 계좌 문제 (임계 구역 문제, 세마포어) 세마포어를 사용해 임계구역 문제를 상호 배타 방식으로 해결하고, 프로세스 실행 순서를 제어한다. 1. Critical Section 임계 구역 문제 1) 임계 구역 문제란?임계 구역 : 멀티 프로세스 환경에서 둘 이상의 프로세스가 동시에 접근해서는 안되는 공유 자원의 코드 영역으로 중요한 부분이다. 2) 예제아래는 부모님(Parent)은 입금, 자녀(Child)는 출금하는 예제이다.Thread를 상속받아 Parent와 Child 클래스를 만들어 BankAccount에 입금입, 출금을 100번씩 실행한다.(입금 deposit, 출금 withdraw는 독립적으로 일어난다.)입, 출금을 같은 횟수를 실행했으니 결과는 0이 나와야한다. public class Main { public static void .. 2024. 12. 11. [운영체제] Thread - BankAccount 문제 멀티 스레드를 이용해 1,000원을 입금하는 부모님 스레드와, 1,000원을 출금하는 자녀 스레드를 생성했다. 어떤 스레드가 먼저 도는지 확인하기 위해 부모님이 입금하면 +를, 자녀가 출금하면 -가 출력되도록 한다. //Java BankAcoount practice1 class HelloWorld{ public static void main(String[] args) throws InterruptedException { BankAccount b = new BankAccount(); Parent p = new Parent(b); Child c - new Child(b); p.start(); c.start(); p.join((); c.join(); System.out.println("\nbalance = ".. 2020. 7. 27. 이전 1 다음