August 2, 2019 Comments(0) Uncategorized

    리눅스 세마포어 예제

    예 4-14 세마포레스 세마포어와 생산자 및 소비자 문제는 sem_t의 동의어이지만, 나는 더 읽기 쉬운 찾을 수 있으며, 대문자는 객체처럼 취급하고 포인터로 전달하는 저를 생각 나게한다. 세마포는 동기화에 대해 배울 수있는 좋은 방법이지만 실제로 뮤텍스 및 조건 변수와 같이 널리 사용되지는 않습니다. Linux 2.6.19 이후 ACL은 이 디렉터리 아래의 파일에 배치하여 사용자별 및 그룹별로 개체 권한을 제어할 수 있습니다. 값은 세마포의 값입니다. 절전 모드 해제는 보류 중인 신호 수를 계산합니다. 즉, 잠에서 깨어났지만 아직 실행을 다시 시작하지 않은 스레드 수입니다. 웨이크 업의 이유는 우리의 세마포가 속성 3을 가지고 있는지 확인하기 위한 것입니다, 세마포의 작은 책에 설명. 세마포는 사용하기 전에 초기화되어야하지만 세마포에는 속성이 없습니다. 실시예 4-14의 데이터 구조는 실시예 4-11에 도시된 조건 변수 예에 사용되는 구조와 유사하다. 두 개의 세마포는 전체 버퍼와 빈 버퍼수를 나타냅니다. 세마포어는 생산자가 버퍼가 비어 있을 때까지 대기하고 버퍼가 가득 차때까지 소비자가 기다릴 수 있도록 합니다.

    세마포는 프로세스 동기화 및 멀티스레딩에 매우 유용합니다. 그러나 예를 들어 C 언어로 말하는 실제 생활에서 하나를 사용하는 방법은 무엇입니까? 세마포를 계산하는 것은 뮤텍스와 함께 사용될 때 조건부 변수만큼 강력합니다. 대부분의 경우 예제 4-14, 예제 4-15 및 예제 4-16에 표시된 것처럼 조건 변수가 아닌 세마포를 계산하여 구현할 때 코드가 더 간단할 수 있습니다. 개념적으로 연결된 목록에서 중첩 잠금을 사용하는 예는 세마포가 음수 정수 수가 아닌 수입니다. 세마포는 일반적으로 리소스에 대한 액세스를 조정하는 데 사용되며, 세마포 수는 사용 중인 리소스 수로 초기화됩니다. 그런 다음 스레드는 리소스가 추가될 때 개수를 원자적으로 증가시키고 리소스가 제거될 때 개수를 원자적으로 감소시요. 리눅스의 POSIX 시스템은 자체 내장 세마포 라이브러리를 제공합니다. 그것을 사용 하려면: 이 솔루션은 설명, 의사 코드를 사용 하 여, 제 4 장에서 세마포의 작은 책. 이 섹션의 나머지 부분에서는 POSIX 세마포의 Linux 구현에 대한 몇 가지 구체적인 세부 정보를 설명합니다. 음, 우리는 리눅스 시스템에서 POSIX 세마포 라이브러리가 있습니다. 그것을 사용하는 방법을 알아 봅시다. 스케줄링 정책에 따라 차단된 스레드가 절전 처리되는 순서가 결정됩니다.

    기본 스케줄링 정책인 SCHED_OTHER는 스레드가 절전처리되는 순서를 지정하지 않습니다. SCHED_FIFO 및 SCHED_RR 실시간 스케줄링 정책에 따라 스레드는 우선 순위로 깨어나게 됩니다. 이 장에서는 세마포와 내 코드로 작업하기 위한 C API를 제공합니다. 그리고 그것은 마지막 도전을 제시 : 당신은 뮤텍스 및 조건 변수를 사용하여 세마포의 구현을 작성할 수 있습니까? . 세마포의 기본 코드는 여기에 제시된 대로 간단합니다. 그러나 함수가 원자성이어야하고 코드를 직접 작성하면 함수완료없이 컨텍스트 전환이 발생하여 혼란이 발생할 수 있기 때문에이 코드를 직접 작성할 수 없습니다.