리눅스 semaphore 예제

우리가 볼 수 있듯이, DEFINE_SEMAPHORE 매크로는 이진 세마포만 초기화 하는 기능을 제공 합니다. DEFINE_SEMAPHORE 매크로는 __SEMAPHORE_INITIALIZER 매크로로 초기화되는 세마포 어 구조의 정의로 확장됩니다. 이 매크로의 구현을 살펴 보겠습니다: 세마포는 오랜 시간 동안 획득 할 수있는 잠금에 대한 좋은 솔루션입니다. 다른 방법으로이 메커니즘은 짧은 시간 동안 획득 한 잠금에 대 한 최적이 아니다. 이를 이해하려면 세마포가 무엇인지 알아야합니다. 이미 짐작할 수 있듯이 주요 작업은 raw_spin_lock_irqsave와 down 함수의 raw_spin_unlock_irqrestore 매크로 간에 수행됩니다. 세마포 카운터의 값을 0과 비교하고 0보다 큰 경우 이 카운터를 소멸시킬 수 있습니다. 즉, 이미 잠금을 획득했습니다. 다른 방법으로 카운터는 0입니다. 즉, 사용 가능한 모든 리소스가 이미 완료되었으며 이 잠금을 획득하기 위해 기다려야 합니다.

우리가 볼 수 있듯이,이 경우 __down 함수가 호출됩니다. 세마포를 뮤텍스로 사용하면 일반적으로 뮤텍스가 잠금 해제되었음을 나타내기 위해 세마포를 1로 초기화합니다. 즉, 하나의 스레드가 차단없이 세마포를 통과 할 수 있습니다. Linux 2.6.19 이후 ACL은 이 디렉터리 아래의 파일에 배치하여 사용자별 및 그룹별로 개체 권한을 제어할 수 있습니다. 세마포로 해결할 수있는 모든 문제는 조건 변수 및 뮤텍스로 해결할 수 있습니다. 이것이 사실임을 증명하는 한 가지 방법은 조건 변수 및 뮤텍스를 사용하여 세마포를 구현하는 것입니다. 이 함수의 구현을 살펴보겠습니다. 그것은 매우 쉽게 보이며 실제로 거의 동일합니다. 따라서 함수는 방금 본 __SEMAPHORE_INITIALIZER 매크로를 사용 하 여 주어진 된 세마포의 초기화를 실행 합니다. 이 장의 이전 부분에서 이미 설명했듯이 Linux 커널의 잠금 유효성 검사기와 관련된 항목을 건너 뜁니다.

POSIX 표준은 세마포에 대한 인터페이스를 지정합니다. Pthread의 일부가 아니지만 Pthread를 구현하는 대부분의 UNIX는 세마포를 제공합니다. sem_open(3) 함수는 새 세마포를 만들거나 기존 명명된 세마포를 엽니다.

Spread the love