Ivory Jacobs

futex 예제

futex 예제

새로운 우선 순위 상속 멀티플렉스 함수는 Futex 맨 페이지에서 문서화되지 않습니다. 그러나, 그들은 리눅스 커널 문서 디렉토리 내에서 pi-futex.txt 및 futex-requeue-pi.txt에 설명되어 있습니다. 이러한 함수는 일반 잠금의 우선 순위 반전 문제로 인해 만들어졌습니다. Futexes는 2016년부터 OpenBSD에서 시행되고 있습니다. [5] 비트 집합 함수를 사용하면 최대 32개의 다른 대기 대기열이 addr1에서 단일 Futex 위치를 공유할 수 있습니다. 그러나 이와 같은 기능을 사용하는 것은 비효율적입니다. 단순히 더 큰 잠금 객체와 그 안에 여러 Futex 위치를 두는 것이 훨씬 낫습니다. 이렇게 하면 관심 있는 웨이터만 웨이크업에 대해 검색해야 합니다. Futex API는 불행히도 제대로 문서화되지 않습니다.

최신 확장의 대부분은 맨 페이지에서 논의되지 않으며 소스 다이빙은 사용 가능한 기능과 사용 방법을 이해해야 합니다. 다행히도 glibc pthreads 라이브러리의 형태로 보다 이식 가능한 인터페이스를 구성하는 데 사용하기 위한 노력이 이미 완료되었습니다. 대부분의 프로그래머는 pthreads 인터페이스를 사용해야 합니다. 그러나 궁극적인 성능을 목표로 하는 사람들은 “덮개 아래”를 탐색하고 자체 스레딩 프리미티브를 구성해야 합니다. 이 멀티플렉스 함수의 예제 사용에 대 한 조건 변수 구현 문서를 참조 하십시오. 리눅스에서, 휴버투스 프랭크 (IBM 토마스 J. 왓슨 연구 센터), 매튜 커크 우드, 잉고 몰나르 (레드 햇) 러스티 러셀 (IBM 리눅스 기술 센터) futex 메커니즘을 유래. Futexes는 리눅스 커널 개발 시리즈의 버전 2.5.7에서 처음으로 등장했습니다. 의미 체계는 버전 2.5.40으로 안정화, 그리고 futexes 는 2.6.x 안정 커널 시리즈의 12 월 2003 릴리스 이후 리눅스 커널 메인 라인의 일부가되었습니다. 마지막으로 조건 변수를 구현하는 데 사용되는 우선 순위 상속 작업이 두 개 더 있습니다.

첫 번째는 FUTEX_CMP_REQUEUE_PI이며, 이는 대상 대기 대기열로 우선 순위 상속 Futexes를 요구하는 것 이외에 FUTEX_CMP_REQUEUE와 동일합니다. 우선 순위 상속 Futex에 우선 순위 상속 Futex는 현재 지원되지 않으므로 addr1은 우선 순위가 없는 상속 Futex를 가리킬 필요가 있습니다. 이 함수를 사용하는 예제 코드 조각은 뮤텍스 및 조건 변수 문서에서 작성되었습니다: Ulrich Drepper는 Futexes는 까다롭습니다라는 futexes의 사용에 대한 정액 문서를 작성했습니다. 이를 사용하여 뮤텍스 라이브러리를 구성하는 방법과 그 과정에서 몇 가지 함정에 대해 설명합니다. 그러나 이 문서는 지난 몇 년 동안 futex API의 확장으로 인해 최신 상태로 처리되었습니다. 또한 futex 시스템 호출의 맨 페이지도 오래되었습니다. 대신, 정말 사용할 수 있는 것을 이해 하려면, 하나는 git에서 리눅스 커널 커밋 로그를 조사 해야. Futex API의 일부가 아니지만 매우 관련이 있는 것은 강력한 잠금 syscalls입니다. 이렇게 하면 잠금이 있는 스레드가 종료되는 경우 프로그램을 복구할 수 있습니다.

일반적으로 다른 스레드가 해당 잠금을 잠글 수 없기 때문에 교착 상태가 발생합니다. 그러나 모든 스레드가 이러한 syscalls 및 “강력한 잠금” 목록을 통해 얻는 모든 잠금에 대해 커널에 알리는 경우 커널은 상황을 복구할 수 있습니다. futexes가 도입되기 전에는 공유 리소스(예: semop)를 잠그고 잠금을 해제하기 위해 시스템 호출이 필요했습니다. 그러나 시스템 호출은 상대적으로 비용이 많이 들기 때문에 사용자 공간에서 커널 공간으로 컨텍스트 전환을 해야 합니다. 프로그램이 점점 더 동시화됨에 따라 잠금이 프로필에 런타임의 상당한 비율로 나타나기 시작했습니다.

News Categories

Vacancies

View Latest Jobs

Contact

01489 661516