c 언어 세마포어 예제

세마포를 잠그거나 기다릴 수 있도록 sem_wait 함수를 사용할 수 있습니다: Linux의 POSIX 시스템은 자체 기본 제공 세마포 라이브러리를 제공합니다. 그것을 사용 하려면 : 세마포를 증가시키기 위해 & p 대신 &v를 사용합니다 .: 이 장의 코드는이 책의 저장소에있는 디렉토리 세마포에 있습니다 (섹션 0.1 참조). sem_wait()를 사용하여 잠그거나 기다릴 수 있습니다. 그리고 sem_post()를 해제하여 잠금을 해제합니다. 세마포는 IPC(프로세스 간 통신)에 대해 sem_init() 또는 sem_open()을 초기화합니다. 이 장에서는 세마포와 내 코드로 작업하기 위한 C API를 제공합니다. 그리고 그것은 마지막 도전을 제시 : 당신은 뮤텍스 및 조건 변수를 사용하여 세마포의 구현을 작성할 수 있습니까? 그럼에도 불구하고 세마포로 간단하게 해결할 수 있는 몇 가지 동기화 문제가 있어 더 확실하게 올바른 솔루션을 얻을 수 있습니다. 값은 세마포의 값입니다. 절전 모드 해제는 보류 중인 신호 수를 계산합니다. 즉, 잠에서 깨어났지만 아직 실행을 다시 시작하지 않은 스레드 수입니다. 웨이크 업의 이유는 우리의 세마포가 속성 3을 가지고 있는지 확인하기 위한 것입니다, 세마포의 작은 책에 설명. 세마포는 프로세스 동기화 및 멀티스레딩에 매우 유용합니다.

그러나 예를 들어 C 언어로 말하는 실제 생활에서 하나를 사용하는 방법은 무엇입니까? 원하는 세마포 API를 결정하려면 훌륭한 리소스가 많지 않습니다. 가장 간단한 최고는 스티븐스에 의해 “유닉스 네트워크 프로그래밍”입니다. 관심 있는 섹션은 Vol #2. 세마포는 sem_init(프로세스 또는 스레드의 경우) 또는 sem_open(IPC의 경우)을 사용하여 초기화됩니다. 맨 페이지에서 세마포 API를 연구하고 이 예제를 루십시오. 3) 세마포를 초기화하지 않고 sem_wait() 및 sem_post()로 전달합니다. 사용 하기 전에 1 (경우에) 1로 초기화 해야 합니다., 또는 교착 상태가 있을 것 이다. 세마포는 스레드가 서로 간섭하지 않고 함께 작업하는 데 사용되는 데이터 구조입니다.

세마포 구현(잠금 및 잠금 해제)에 대한 샘플 코드 아래를 확인하십시오. 스레드는 우아하고 효율적인 프로그램 작성을 크게 단순화할 수 있습니다. 그러나 이전 예제의 변수 cnt와 같이 여러 스레드가 공통 주소 공간을 공유하는 경우 문제가 있습니다. 계속하기 전에 조건 변수 및 뮤텍스를 사용하여 sem.h에서 세마포 API를 구현하는 함수를 작성하는 연습으로 이 작업을 시도해 볼 수 있습니다. 이 책의 리포지토리에 mysem.c 및 mysem.h에 솔루션을 넣을 수 있으며 mysem_soln.c 및 mysem_soln.h에서 내 솔루션을 찾을 수 있습니다. 2) 함수 sem_wait(), sem_post()는 세마포 변수를 필요로 하지만 세마포어 ID를 전달하는 것은 의미가 없습니다. 이제 IPC 세마포에 대한 ID를 가져오는 것으로 시작합니다. 코드의 근본적인 문제는 두 개의 API를 혼합한다는 것입니다. 불행히도 온라인 리소스는 이를 지적하는 데 는 좋지 않지만 UNIX와 같은 시스템에는 두 개의 세마포 API가 있습니다: 세마포로 해결할 수 있는 모든 문제는 조건 변수및 뮤텍스로 해결할 수 있습니다.

Comments are closed