10장. RHEL for Real Time의 스레드 동기화 메커니즘
실시간으로 두 개 이상의 스레드가 공유 리소스에 동시에 액세스해야 하는 경우 스레드는 스레드 동기화 메커니즘을 사용하여 조정합니다. 스레드 동기화를 사용하면 한 번에 하나의 스레드만 공유 리소스를 사용합니다. Linux에서 사용되는 3개의 스레드 동기화 메커니즘: Mutexes, Barriers, Condition 변수(condvars).
10.1. Mutexes 링크 복사링크가 클립보드에 복사되었습니다!
Mutex는 상호 제외라는 용어에서 파생됩니다. 상호 제외 오브젝트는 리소스에 대한 액세스를 동기화합니다. 한 번에 하나의 스레드만 뮤텍스를 얻을 수 있도록 하는 메커니즘입니다.
코드의 각 섹션에 대한 직렬 액세스를 만들어 하나의 스레드만 한 번에 코드를 실행하도록 합니다. Mutexes는 뮤지션 특성 개체라고 하는 특성 개체를 사용하여 생성됩니다.Mutexes are created by using an attribute object known as the mutex attribute object. 이는 구현하도록 선택한 POSIX 옵션에 따라 다양한 속성을 포함하는 추상 오브젝트입니다. 특성 오브젝트는 pthread_mutex_t 변수로 정의됩니다. 개체는 뮤지션에 대해 정의된 특성을 저장합니다. pthread_mutex_init(&my_mutex, &my_mutex_attr), pthread_mutexattr_setbust() 및 pthread_mutexattr_getrobust() 함수는 0을 반환합니다. 오류가 발생하면 오류 번호를 반환합니다.
실시간으로 특성 개체를 유지하여 동일한 형식의 더 많은 뮤지션을 초기화하거나 특성 개체를 정리(destroy)할 수 있습니다.In real-time, you can either retain the attribute object to initialize more mutexes of the same type or you can clean up (destroy) the attribute object. 뮤지컬은 두 경우 모두 영향을 받지 않습니다. 뮤텍스에는 표준 및 고급 유형의 뮤지셔너스가 포함됩니다.
표준 뮤추스
실시간 표준 뮤지스트는 비공개, 비재귀, 로비 버스트 및 우선 순위가 아닌 상속 가능 뮤지션입니다. pthread_mutex_t 를 초기화하여 pthread_mutex_init(&my_mutex, &my_mutex_attr) 를 사용하면 표준 뮤지션이 생성됩니다. 표준 Mutex 유형을 사용하는 경우 애플리케이션은 pthreads API 및 RHEL for Real Time 커널에서 제공하는 이점을 활용할 수 없습니다.
고급 뮤지션
추가 기능으로 정의된 뮤지컬을 고급 뮤지션이라고 합니다. 고급 기능에는 우선 순위 상속, 뮤지션의 강력한 동작, 공유 및 개인 뮤지션이 포함됩니다. 예를 들어 강력한 뮤지션의 경우 pthread_mutexattr_setrobust() 함수를 초기화하면 강력한 특성이 설정됩니다. 마찬가지로 PTHREAD_PROCESS_SHARED 특성을 사용하여 스레드가 할당된 메모리에 액세스할 수 있는 경우 모든 스레드가 뮤지션에서 작동할 수 있습니다.Similarly, by using the attribute PTHREAD_PROCESS_SHARED , allows any thread to operate on the mutex, provided the thread has access to its allocated memory. PTHREAD_PROCESS_PRIVATE 속성은 개인 뮤지션을 설정합니다.
Robust 뮤지션이 자동으로 해제되지 않고 수동으로 해제할 때까지 잠길 수 있습니다.