세마포어 예제

세마포 어 클래스의 생성자 : 세마포 클래스에 두 개의 생성자가 있습니다. 기사 Mutexes 와 세마포 는 마이클 바에 의해 신비화 뮤텍스와 세마포가 다른 만드는 것에 큰 짧은 소개입니다, 그들은해야하고 사용하지 말아야 할 때. 여기서 몇 가지 주요 단락을 발췌했습니다. 그것은 Djikstra에 의해 세마포어 (자본 “S”,이 문서에서)의 1974 년 발명으로 거슬러 올라간다으로 뮤텍스와 세마포 사이의 광범위한 현대 혼란의 원인은 역사적이다. 이 날짜 이전에는 컴퓨터 과학자에게 알려진 인터럽트 안전 작업 동기화 및 신호 메커니즘중 어느 것도 두 개 이상의 작업에서 사용할 수 있도록 효율적으로 확장할 수 없었습니다. Dijkstra의 혁신적인 안전 및 확장 가능한 세마포는 중요한 섹션 보호 및 신호 모두에 적용되었습니다. 그리고 이렇게 혼란이 시작되었다. 동일한 세션에서 두 번 이상 실행될 때 “인스턴스가 실행 중”이라는 메시지를 인쇄하는 프로그램을 구현합니다. 예를 들어 Windows에서 단어 응용 프로그램 또는 Adobe 리더를 관찰하면 작업 관리자에서 하나의 인스턴스만 볼 수 있습니다. 그것을 구현하는 방법? 뮤텍스와 세마포의 차이점은 무엇입니까? 언제 뮤텍스를 사용하고 세마포를 언제 사용해야 합니까? 세마포는 인종 조건을 예방하는 데 유용한 도구입니다.

그러나, 그들의 사용은 결코 프로그램이 이러한 문제에서 무료 보장. 임의의 리소스 수를 허용하는 세마포를 세마포어를 계산세마포어라고 하며, 값 0과 1(또는 잠금/잠금 해제, 사용 가능/사용 가능)으로 제한되는 세마포를 이진 세마포라고 하며 잠금을 구현하는 데 사용됩니다. 이 예제에 제시된 생산자-소비자 모델을 사용하면 매우 동시다영적인 다중 스레드 응용 프로그램을 작성할 수 있습니다. 다중 프로세서 컴퓨터에서 프로그램은 버퍼의 다른 부분에서 동시에 두 스레드를 활성화할 수 있기 때문에 동등한 뮤텍스 기반 프로그램보다 최대 두 배 빠릅니다. 생산자는 DataSize 바이트의 데이터를 생성합니다. 순환 버퍼에 바이트를 쓰기 전에 freeBytes 세마포를 사용하여 “무료” 바이트를 획득해야 합니다. QSemaphore::acquire() 호출은 소비자가 생산자와 보조를 맞추지 않으면 차단될 수 있습니다. 문서의 첫 번째 줄은 뮤텍스는 ressource에 1 및 1 동시 가속만 허용하는 세마포어라고 명시되어 있습니다.

따라서 코드가 동일하게 “보기”하지만 첫 번째 코드가 아닌 이유 : // max 4 people 정적 세마포어 = 새로운 세마포어 (4); 및 제2 코드: // max 1명 정적 세마포세마포 = 새로운 세마포어(1); 예를 들어 POSIX pthread_mutex_trylock() API입니다. 뮤텍스를 사용할 수 없는 경우 함수는 즉시 반환되지만 API pthread_mutex_lock()은 리소스를 사용할 수 있을 때까지 스레드를 차단합니다. 생산자-소비자 문제를 해결하기 위해 QSemaphore를 사용하는 대안은 QWaitCondition 및 QMutex를 사용하는 것입니다. 대기 조건 예제가 수행하는 것입니다. 세마포는 동기화와 상호 배제를 모두 구현하여 동시성을 달성하는 데 도움이 되는 프로그래밍 구조입니다. 세마포는 바이너리와 카운팅의 두 가지 유형입니다. 세마포어는 또한 로 사용할 수 있습니다 … 세마포. 예를 들어 큐에 데이터를 큐에 큐에 큐에 큐에 큐에 큐에 큐에 여러 프로세스가 있고 큐에서 데이터를 소비하는 작업이 하나만 있는 경우입니다. 사용 가능한 작업이 사용 가능한 데이터에 대한 큐를 지속적으로 폴링하지 않으려면 세마포를 사용할 수 있습니다.