Java에서 세마포어란 무엇이며 어떻게 사용합니까?
게시 됨: 2022-05-261995년 Sun Microsystems는 협업, 클래스 및 개체 종속 프로그래밍 언어이자 컴퓨터 플랫폼인 Java를 우리에게 제공했습니다. Java가 설치되어 있지 않으면 수많은 프로그램과 웹사이트가 작동하지 않으며 매일 더 많은 프로그램이 개발되고 있습니다. Java는 빠른 속도, 보안 및 신뢰성으로 마케팅되고 찬사를 받았습니다. 인터넷의 분산된 세계에서 사용하기 위해 특별히 만들어진 컴퓨터 언어입니다. C++ 프로그래밍 언어의 디자인을 염두에 두고 만들어졌지만 사용하기 쉽고 객체 지향 프로그래밍 방식을 적용합니다.
소프트웨어 개발 의 중역 PG 프로그램 은 Java에서 탁월한 성능을 발휘하는 데 필요한 모든 기술을 정확히 가르쳐줍니다.
세마포어의 예:
공유 var 뮤텍스: 세마포어 = 1;
프로세스 나
시작하다
.
.
P(뮤텍스);
CS를 실행합니다.
V(뮤텍스);
.
.
끝;
Java가 눈에 띄는 이유는 무엇입니까?
Java 개발자, 설계자 및 애호가로 구성된 헌신적인 커뮤니티는 Java를 테스트, 개선, 확장 및 검증했습니다. 20년 가까이 된 뿌리에도 불구하고 Java는 수년에 걸쳐 꾸준히 발전해 왔습니다.
Java는 광범위한 컴퓨터 시스템을 위한 이식 가능한 고성능 프로그램의 개발을 용이하게 하여 접근성 및 플랫폼 간 상호 작용을 포괄하는 필수 개념을 지원합니다. 기업은 추가 서비스를 제공하고 최종 사용자의 생산성, 커뮤니케이션 및 협업을 향상시키며, 기업 및 소비자 애플리케이션을 이기종 환경에서 사용할 수 있게 함으로써 비용을 대폭 절감할 수 있습니다.
자바에서 세마포어란?
세마포어는 카운터를 사용하여 공유 리소스에 대한 액세스를 규제합니다. 카운터가 0보다 크면 액세스가 허용됩니다. 값이 0이면 액세스가 거부됩니다. 카운터 수는 공유 리소스에 대한 액세스를 제공하는 허용을 계산합니다. 결과적으로 리소스에 액세스하려면 스레드가 먼저 세마포어로부터 권한을 얻어야 합니다.
어떻게 작동합니까?
일반적으로 세마포어를 사용하는 동안 공유 리소스에 액세스하려는 스레드는 권한을 얻으려고 시도합니다. 세마포어 수가 0보다 크면 스레드가 권한을 얻어 세마포어 수가 감소합니다. 그렇지 않은 경우 스레드는 허가를 받을 때까지 중지됩니다.
스레드가 더 이상 공유 리소스에 액세스할 필요가 없으면 허용을 해제하여 세마포어 수가 증가합니다. 다른 쓰레드가 허가를 기다리고 있다면 그 쓰레드는 그 순간에 하나를 얻게 될 것입니다.
세마포어의 유형
자바에는 4가지 유형의 세마포어가 있습니다. 그것들은 다음과 같습니다:
이진 세마포어 :
바이너리 세마포어는 0과 1만 값으로 받아들이고 상호 배제를 생성하고 동시 활동을 동기화하는 데 사용됩니다.
이진 세마포어의 예:
공개 클래스 BinarySemaphoreExample
{
개인 부울 잠김 = false;
BinarySemaphore(int 초기값)
{
잠김 = (초기 == 0);
}
public synced void waitForNotify()가 InterruptedException을 던짐
{
동안(잠김)
{
기다리다();
}
잠김 = 참;
}
공개 동기화 무효 notifyToWakeup()
{
(잠긴) 경우
{
통지();
}
잠김 = 거짓;
}
}
소프트웨어 개발과 관련된 인기 기사 읽기
Java에서 데이터 추상화를 구현하는 방법은 무엇입니까? | Java에서 내부 클래스란 무엇입니까? | Java 식별자: 정의, 구문 및 예 |
예제와 함께 OOPS의 캡슐화 이해하기 | C의 명령줄 인수 설명 | 2022년 클라우드 컴퓨팅의 상위 10가지 기능 및 특성 |
Java의 다형성: 개념, 유형, 특성 및 예 | Java 패키지 및 사용 방법 | 초보자를 위한 Git 튜토리얼: 처음부터 Git 배우기 |
카운팅 세마포어 :
매 순간 카운팅 세마포어의 값은 임계 영역에 동시에 액세스할 수 있는 최대 프로세스 수를 나타냅니다.
세마포어 계산의 예:
공개 클래스 CountingSemaphoreExample
{
개인 int 신호 = 0;
공개 동기화 무효 테이크()
{
this.signal++;
this.notify();
}
공개 동기화된 무효 릴리스()는 InterruptedException을 발생시킵니다.
{
동안(this.signal == 0)
기다리다();
this.signal-;
}
}
시간 지정 세마포어:
Timed 세마포어는 스레드가 정해진 시간 동안 실행되도록 합니다. 일정 시간이 지나면 타이머가 재설정되고 다른 모든 허가가 해제됩니다.
시간 제한 세마포어의 예:
클래스 TimedSemaphoresExample
{
개인 TimedSemaphore 세마포어;
TimedSemaphoreExample(긴 기간, int slotLimit)
{
세마포어 = 새로운 TimedSemaphore(기간, TimeUnit.SECONDS, slotLimit);
}
부울 tryAdd()
{
반환 세마포어.tryAcquire();
}
int availableSlots()
{
semaphore.getAvailablePermits()를 반환합니다.
}
}
경계 세마포어 :
경계 세마포어를 사용하여 상한을 설정할 수 있습니다. 상한 값이 없기 때문에 세마포어를 계산하는 대신 사용됩니다. 상한값은 저장할 수 있는 최대 신호 수를 나타냅니다.
경계 세마포어의 예 :
공개 클래스 BoundedSemaphoresExample
{
개인 int 신호 = 0;
개인 int 경계 = 0;
공개 BoundedSemaphoreexample(int upperBound)
{
this.bound = 상한;
}
public void 동기화된 take()가 InterruptedException을 던졌습니다.
{
동안(this.signals == 바운드)
기다리다();
this.signals++;
this.notify++;
}
public void 동기화된 릴리스()가 InterruptedException을 발생시킵니다.
{
동안(this.signal == 0)
기다리다();
this.signals-;
}
}
인기 있는 소프트웨어 엔지니어링 과정 살펴보기
에스엘. 아니 | 소프트웨어 개발 프로그램 | |
1 | LJMU 및 IIITB의 컴퓨터 과학 석사 | Caltech CTME 사이버 보안 인증 프로그램 |
2 | 전체 스택 개발 부트캠프 | 블록체인 PG 프로그램 |
삼 | 소프트웨어 개발의 이그 제 큐 티브 포스트 대학원 프로그램 - DevOps 전문화 | 모든 소프트웨어 엔지니어링 코스 보기 |
형질:
세마포어에는 다음과 같은 특성이 있습니다.
- 스레드가 서로 통신할 수 있도록 합니다.
- 동기화 정도를 감소시킵니다. 결과적으로 낮은 수준의 동기화 방법을 제공합니다.
- 세마포어에 음수 값이 없습니다. 0보다 크거나 같은 값을 갖습니다.
- 테스트 작업과 인터럽트를 사용하여 세마포어를 구현하고 파일 디스크립터를 사용하여 실행할 수 있습니다.
세마포어의 장단점:
장점:
- 많은 스레드가 중요한 부분에 도달할 수 있습니다.
- 세마포어는 기계에 구애받지 않습니다.
- 세마포어는 마이크로커널의 기계 독립적인 코드에서 구현됩니다.
- 여러 프로세스가 중요한 섹션에 액세스하는 것은 허용되지 않습니다.
- 세마포어에서 항상 바쁜 대기가 있기 때문에 프로세스 시간이나 자원의 낭비가 없습니다.
- 그것들은 기계 독립적이므로 마이크로커널의 기계 독립적 코드에서 실행되어야 합니다.
- 적응 가능한 리소스 관리가 가능합니다.
단점:
- 우선 순위 반전은 세마포어의 가장 중요한 제한 사항 중 하나입니다.
- 운영 체제는 모든 대기 및 신호 세마포 호출을 추적해야 합니다.
- 그들의 사용법은 결코 의무적이지 않으며 단순히 전통에 의해 이루어집니다.
- 세마포에서 교착 상태를 방지하려면 대기 및 신호 작업을 올바르게 수행해야 합니다.
- 세마포어 프로그래밍은 복잡하기 때문에 상호 배제가 이루어지지 않을 가능성이 있습니다.
- 또한 모듈성이 손실되기 때문에 대규모 응용 프로그램에 대한 현실적인 전략이 아닙니다.
- 세마포어는 프로그래밍 오류에 더 취약합니다.
- 프로그래밍 실수는 교착 상태 또는 상호 배제 위반을 초래할 수 있습니다.
세마포어를 잠금으로 사용하는 방법?
세마포어는 Java에서 잠금으로 사용할 수 있습니다. 리소스에 대한 액세스를 제한함을 나타냅니다. 잠금을 획득하려면 잠긴 리소스에 액세스하려는 모든 스레드가 먼저 acquire() 함수를 호출해야 합니다. 작업을 완료한 후 스레드는 release() 함수를 호출하여 잠금을 해제해야 합니다. 상한선은 1로 설정해야 함을 명심하십시오. 풀 스택 개발의 PG 경영자 과정은 이러한 모든 기술을 마스터하는 데 도움이 될 것입니다.
요약
Java와 같은 프로그래밍 언어에 대한 명확한 아이디어를 갖는 것은 소프트웨어 개발자로서의 밝은 경력에 필수적입니다. upGrad 는 유망한 직업에 적합한 기회를 제공할 수 있는 여러 과정을 제공합니다. upGrad 의 Purude University에서 풀스택 개발 전문화 과정을 통해 소프트웨어 개발 분야에서 성공하는 데 필요한 모든 기술을 배울 수 있습니다.
세계 최고의 대학에서 온라인으로 소프트웨어 개발 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
Java에서 세마포어가 필요한 이유는 무엇입니까?
세마포어는 동시 프로세스를 관리하기 위해 프로세스 동기화에 사용되는 변수입니다. 또한 여러 동시 프로세스에서 공유 리소스에 대한 액세스를 제어하여 경합 문제를 방지합니다.
카운팅 세마포어가 필요한 이유는 무엇입니까?
세마포는 세마포 수를 총 리소스 목록으로 설정하여 리소스 액세스를 조정하는 데 자주 사용됩니다. 자원이 주어지거나 추가되면 스레드는 원자적으로 개수를 늘리고 자원을 철회하면 스레드는 원자적으로 개수를 줄입니다.
Semaphore가 동기화 도구로 알려진 이유는 무엇입니까?
세마포어는 본질적으로 많은 스레드가 공유하는 정수 변수입니다. 이 변수는 임계 섹션 문제를 극복하고 프로세스 동기화를 설정하기 위해 다중 처리 환경에서 활용됩니다. 이를 뮤텍스 잠금이라고도 합니다.
풀스택 개발이란?
전체 스택 개발은 웹 애플리케이션의 프런트 엔드(클라이언트 측) 및 백엔드(서버 측) 구성 요소를 모두 생성하는 것입니다. 전체 스택 웹 개발자는 본격적인 온라인 응용 프로그램 및 웹 사이트를 만들 수 있습니다. 그들은 프론트엔드, 백엔드, 데이터베이스 및 온라인 애플리케이션 또는 웹사이트의 디버깅을 담당합니다.