1, 신호량의 데이터 구조는 신호량을 기다리는 다음 프로세스에 대한 값과 포인터입니다. 세마포어 값은 해당 자원의 사용과 관련이 있습니다.
값이 0 보다 크면 현재 사용 가능한 리소스의 양을 나타냅니다. 값이 0 보다 작으면 절대값은 자원 사용을 기다리는 프로세스 수를 나타냅니다. 신호량 값은 PV 작업을 통해서만 변경할 수 있습니다.
일반적으로 플래그어 S >;; =0, s 는 사용 가능한 자원 수를 나타냅니다. P 작업을 수행한다는 것은 단위 자원 할당 요청을 의미하므로 s 값은 1 을 감소시킵니다.
S<0 은 사용 가능한 자원이 없음을 의미하며 요청자는 실행하기 전에 다른 프로세스에서 이러한 자원을 해제할 때까지 기다려야 합니다. V 작업을 수행한다는 것은 단위 자원을 해제하는 것을 의미하므로 s 의 값은1에 추가됩니다. S<0 인 경우 일부 프로세스가 리소스를 기다리고 있으므로 대기 중인 프로세스를 깨우고 실행합니다.
신호량은 자바 멀티스레드 손자병법의 Java 내장 싱크로, 신호량을 통해 공공 자원에 대한 멀티스레드 동시 액세스 제어를 가능하게 한다.
스레드가 공용 리소스에 들어가면 먼저 라이센스를 받아야 합니다. 라이센스를 얻을 수 없는 경우 다른 스레드가 라이센스를 해제할 때까지 기다려야 합니다. 각 스레드는 공용 리소스를 떠날 때 라이센스를 해제합니다.
신호량의 주요 응용 프로그램 장면은 최대 N 개의 스레드를 제어하여 동시에 리소스에 액세스하는 것입니다. 여기서 카운터의 최대값은 최대 허용 값 N 입니다.
주차장을 예로 들다. 주차장 1 * * 에는 8 개의 좌석이 있는데, 그 중 6 개는 이미 주차되어 있고, 그 다음에 두 대의 차가 온다고 가정해 봅시다. 이때 두 차 모두 주차할 수 있는데, 마침 두 개의 좌석이 남아 있기 때문이다. 그리고 또 한 대의 차가 왔다. 지금은 자리가 없어 다른 차가 갈 때까지 기다릴 수밖에 없다.