PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init (&mutex, param)
와 어떤 차이가 있습니까?
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
또는
pthread_mutex_t lock;
pthread_mutex_init ( &lock, NULL);
첫 번째 방법만 사용해도 안전합니까?
메모: 질문은 주로 매우 작은 프로그램에 관한 것입니다.여러 클라이언트를 서버에 접속하여 워커 스레드로 그 문의사항을 해결합니다.
이전 버전의 POSIX 표준에서는 이니셜라이저를 사용한 첫 번째 메서드는 스태틱하게 할당된 변수에서만 동작할 수 있습니다.변수가 posix 규격의 경우,auto
함수 본문에 정의되어 있는 변수.이것이 허용되지 않는 플랫폼은 본 적이 없지만auto
이 제한은 최신 버전의 POSIX 표준에서 삭제되었습니다.
그static
bariant는 부트스트랩 코드를 훨씬 쉽게 쓸 수 있기 때문에 가능하다면 매우 적합합니다.실행 시 이러한 뮤텍스를 사용하는 코드를 입력할 때마다 뮤텍스가 초기화됩니다.이는 멀티스레딩 컨텍스트에서 중요한 정보입니다.
init 함수를 사용하는 메서드는 예를 들어 재귀적이거나 스레드 간뿐만 아니라 프로세스 간에 공유할 수 있는 등 뮤텍스의 특별한 속성이 필요한 경우에 적합합니다.
나는 이 책에서 이것을 인용하고 싶다.
와 함께
POSIX
스레드, 잠금을 초기화하는 방법은 두 가지가 있습니다.이를 위한 한 가지 방법은PTHREAD_MUTEX_INITIALIZER
다음과 같습니다.pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
이렇게 하면 잠금이 기본값으로 설정되므로 잠금을 사용할 수 있습니다.동적인 방법(즉, 실행 시)은, 다음에 콜을 발신하는 것입니다.
pthread_mutex_init()
다음과 같습니다.int rc = pthread_mutex_init(&lock, NULL); assert(rc == 0); // always check success!
이 루틴의 첫 번째 인수는 잠금 자체의 주소이며 두 번째 인수는 옵션의 속성 세트입니다.속성에 대한 자세한 내용은 에서 NULL을 전달하면 기본값이 사용됩니다.어느 쪽이든 동작하지만, 통상은 다이나믹(라이터) 방식을 사용합니다.
동적 초기화로 뮤텍스의 속성을 더 설정할 수 있으며 런타임에 뮤텍스 묶음을 추가하는 경우에만 동적 방법을 사용할 수 있습니다.
하지만 정적 접근 방식에는 문제가 없습니다. 필요에 따라 접근하면 됩니다.
기본 뮤텍스 속성이 적절한 경우 매크로 PTHREAD_MUTEX_INITIALIZER를 사용하여 뮤텍스를 초기화할 수 있습니다.
mutex의 Atribute를 지정하는 경우는, 다이나믹 초기화 ......를 사용합니다.
이 효과는 파라미터 속성이 NULL로 지정된 pthread_mutex_init()에 대한 호출에 의한 동적 초기화와 동등해야 합니다.단, 에러 체크는 실행되지 않습니다.
언급URL : https://stackoverflow.com/questions/14320041/pthread-mutex-initializer-vs-pthread-mutex-init-mutex-param
'sourcecode' 카테고리의 다른 글
VUE2js: 소품 변경 후 컴포넌트를 재렌더하는 방법 (0) | 2022.08.30 |
---|---|
##(더블 해시)는 프리프로세서 디렉티브에서 무엇을 합니까? (0) | 2022.08.30 |
실행 중인 프로세스를 나열하는 Linux API? (0) | 2022.08.30 |
Vue.js를 사용하여 클릭 시 특정 하위 요소를 업데이트하려면 어떻게 해야 합니까? (0) | 2022.08.30 |
오류: Java 가상 시스템 Mac OSX Mavericks를 생성할 수 없습니다. (0) | 2022.08.30 |