자바 세마포어 예제

By agosto 2, 2019Sem categoria

이 클래스의 생성자는 선택적으로 공정성 매개 변수를 허용합니다. false를 설정하면 이 클래스는 스레드가 허가를 획득하는 순서에 대해 보장하지 않습니다. 특히, 바깅이 허용됩니다, 즉, acquire()를 호출하는 스레드는 대기 중이던 스레드보다 먼저 허가를 할당할 수 있습니다 – 논리적으로 새 스레드는 대기 스레드큐의 헤드에 자신을 배치합니다. 공정성이 true로 설정되면 세마포는 획득 메서드 중 어느 한 쪽을 호출하는 스레드가 해당 메서드의 호출이 처리된 순서대로 허가를 얻기 위해 선택되도록 보장합니다(선착순으로; FIFO)를 참조하십시오. FIFO 순서는 반드시 이러한 메서드 내에서 실행의 특정 내부 지점에 적용 됩니다. 따라서 한 스레드가 다른 스레드보다 더 많은 수의 획득을 호출할 수 있지만 메서드에서 반환될 때 와 유사하게 순서 지점에 도달할 수 있습니다. 또한 시간 제 시도취득 방법은 공정성 설정을 존중하지 않지만 사용 가능한 모든 허가를 취할 것입니다. 세마포는 카운터를 사용하여 공유 리소스에 대한 액세스를 제어합니다. 카운터가 0보다 크면 액세스가 허용됩니다. 0이면 액세스가 거부됩니다. 카운터가 계산하는 것은 공유 리소스에 대한 액세스를 허용하는 허용 권한입니다. 따라서 리소스에 액세스하려면 스레드가 세마포로부터 허가를 받아야 합니다.

세마포의 카운터 값은 항상 제한 0 안에 있어야 합니다 .= n >= 5. 그것은 부정하지 않음을 의미합니다. 실행기서비스에서 실행되는 작업 수를 제한하는 Java 세마포어 예제입니다. 이 예제에서는 5 호출 가능한 작업이 실행기Service에 제출되지만 2개의 작업만 동시에 실행됩니다. 다음 예제에서는 간단한 이진 세마포를 사용하여 카운터를 작성합니다. 다른 종류의 동기화 제어에 세마포를 사용할 때 비공정 주문의 처리량 이점은 공정성 고려 사항보다 더 중요한 경우가 많습니다. 세마포어는 종종 일부(물리적 또는 논리적) 리소스에 액세스할 수 있는 것보다 스레드 수를 제한하는 데 사용됩니다. 예를 들어, 여기에 항목의 풀에 대 한 액세스를 제어 하는 세마포를 사용 하는 클래스: 누군가가 출력을 생성 하는 데 도움이 수 있습니다 (세마포를 사용 하 여) 1Aa2Bb3Cc… 그래서, 나는 3 개의 스레드 (하나의 인쇄 번호, 하나의 인쇄 대문자, 하나의 인쇄 작은 글자)가있는 경우. 그러나 몇 시간 동안 자고 나면 세마포가 다시 설정하고 허가를 해제해야합니다 : 세마포는 하나 이상의 공유 리소스에 대한 액세스를 보호하는 카운터입니다. 이 자습서에서는 여러 스레드에서 공유 리소스에 대 한 액세스를 제어 하기 위해 이진 세마포를 사용 하는 방법을 설명 합니다. 문서의 첫 번째 줄은 뮤텍스는 ressource에 1 및 1 동시 가속만 허용하는 세마포어라고 명시되어 있습니다.