c 세마포어 예제

Posted by abitou on Αυγ 02, 2019

세마포어는 sem_t의 동의어이지만 더 읽기 쉬운 것을 발견하고 대문자는 객체처럼 취급하고 포인터로 전달하라고 상기시킵니다. 스레드는 우아하고 효율적인 프로그램 작성을 크게 단순화할 수 있습니다. 그러나 이전 예제의 변수 cnt와 같이 여러 스레드가 공통 주소 공간을 공유하는 경우 문제가 있습니다. 이 솔루션은 세마포어의 작은 책의 4 장에서 의사 코드를 사용하여 설명합니다. 활동 2. 프로그램이 항상 예상 출력(값 2*NITER)을 생성하도록 프로그램 badcnt.c를 수정하는 가이드로 위의 예제를 사용합니다. 코드를 수정하기 전에 badcnt.c의 복사본을 goodcnt.c로 만듭니다. 세마포는 프로세스 동기화 및 멀티스레딩에 매우 유용합니다. 그러나 예를 들어 C 언어로 말하는 실제 생활에서 하나를 사용하는 방법은 무엇입니까? 세마포는 동기화에 대해 배울 수있는 좋은 방법이지만 실제로 뮤텍스 및 조건 변수와 같이 널리 사용되지는 않습니다. 값은 세마포의 값입니다. 절전 모드 해제는 보류 중인 신호 수를 계산합니다. 즉, 잠에서 깨어났지만 아직 실행을 다시 시작하지 않은 스레드 수입니다. 웨이크 업의 이유는 우리의 세마포가 속성 3을 가지고 있는지 확인하기 위한 것입니다, 세마포의 작은 책에 설명.

이 때 대기 중인 스레드 중 하나가 cond_wait에서 반환되고 절전 모드 해제가 여전히 사용 가능한지 여부를 확인합니다. 그렇지 않으면 조건 변수를 다시 반복하고 기다립니다. 그렇다면 절하를 하고 뮤텍스의 잠금을 해제하고 종료합니다. 다음은 POSIX 뮤텍스 및 조건 변수를 사용하여 세마포를 구현하는 것입니다 : 이 시점에서 대기 스레드 중 하나가 깨어날 수 있지만 신호 스레드가 잠금을 해제 할 때까지 뮤텍스는 여전히 잠겨 있습니다. queue_push는 더 이상 queue_full을 호출할 필요가 없습니다. 대신 세마포어는 사용 가능한 공백 수를 추적하고 큐가 가득 차면 생산자를 차단합니다. 이 두 API는 의외로 다릅니다. 둘 다 교과서 스타일 세마포를 지원하지만 언급 할 가치가 시스템 V API에 몇 가지 좋은 나쁜 점이 있습니다 :이 장은 세마포와 쉽게 작업 할 수 있도록내 코드와 함께 작업하기위한 C API를 제공합니다. 그리고 그것은 마지막 도전을 제시 : 당신은 뮤텍스 및 조건 변수를 사용하여 세마포의 구현을 작성할 수 있습니까? 다시 말하지만 스레드는 값을 증가시키기 전에 뮤텍스를 잠그야 합니다.

세마포가 음수이면 스레드가 대기 중임을 의미하므로 신호 스레드는 웨이크업을 증가시키고 조건 변수를 신호합니다. POSIX 표준은 세마포에 대한 인터페이스를 지정합니다. Pthread의 일부가 아니지만 Pthread를 구현하는 대부분의 UNIX는 세마포를 제공합니다.

Comments are closed.

Ο καιρός

ar8ra

advertisement