posix 다중 루틴 감각 - 루틴 고급 프로그래밍 (조건 변수 속성)
int pthread_cond_init(thread_cond_t *cond,pthread_condattr_t *attr);
매개 변수:cond 조건 변수 attr 조건 변수 속성이 성공적으로 0을 반환하였습니다. 오류 반환 오류 번호입니다.참고: 매개변수 attr가 비어 있으면 기본 속성을 사용하여 지정된 조건 변수를 설정합니다.
2. 조건 변수 파괴 함수
int pthread_cond_destroy(pthread_cond_t *cond);
0이(가) 성공적으로 반환되었습니다. 오류가 발생하면 오류 번호가 반환됩니다.
주의: 지정한 조건 변수를 파괴하면 분배된 자원을 방출합니다.이 함수를 호출하는 프로세스도 매개 변수가 지정한 조건 변수를 기다리도록 요구하지 않습니다.
3. 조건 변수 대기 함수
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mytex,const struct timespec *abstime);
매개 변수:cond 조건 변수,mutex 상호 배척 잠금 주의 차이:함수 pthreadcond_timedwait 함수 유형과 함수 pthreadcond_wait, 인용된 인자 * abstime에 도달하거나 초과하면 오류 ETIME를 끝내고 되돌려줍니다.typedef struct timespec {time t tv sec;//s long tv nsex;//ms}timespect;즉, 시간이 예상치를 초과하면 오류를 되돌려줍니다!4. 조건 변수 알림 함수
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);
매개 변수:cond 조건 변수
0이(가) 성공적으로 반환되었습니다. 오류가 발생하면 오류 번호가 반환됩니다.pthread_cond_signal: 한 라인만 깨웁니다.pthread_cond_broadcast: 모든 라인을 깨웁니다.주의: pthread 호출 시cond_signal에서 같은 조건 변수에 막힌 라인이 잠금 해제됩니다.만약 여러 개의 라인이 동시에 막히면, 스케줄링 정책에 의해 알림을 받는 라인을 확정합니다.pthread 를 호출하면cond_broadcast, 이 조건 변수에 막힌 모든 라인을 알려 줍니다.일단 깨어나면, 라인은 여전히 서로 자물쇠를 요구할 것이다.만약 현재 알림을 기다리는 라인이 없다면, 위의 두 가지 호출은 사실상 빈 동작이 됩니다.잘못된 주소를 가리키는 매개변수*cond의 경우 EINVAL 값이 반환됩니다.
5. 조건 변수 속성의 초기화/제거 함수
pthread_condattr_t attr;
int pthread_condattr_init(pthread_condattr_t *attr);
int pthread_condattr_destroy(pthread_condattr_t *attr);
반환 값: 0을 성공적으로 반환한 경우 오류 번호를 반환하지 못한 경우일단 어떤 조건 변수 대상이 초기화되면 우리는 아래 함수를 이용하여 특정 속성을 보거나 수정할 수 있다.
6. 조건 변수 속성 함수 보기 또는 수정
int pthread_condattr_getpshared(pthread_condattr_t *attr,int *pshared);
int pthread_condattr_setpshared(pthread_condattr_t *attr,int pshared);
pshared 평가 정보: PTHREADPROCESS_PRIVATE(기본값): 조건 변수는 세션의 스레드에서 사용할 수 있습니다.
PTHREAD_PROCESS_SHARED: 조건 변수는 여러 프로세스의 스레드에서 사용할 수 있습니다.
참고: PTHREADPROCESS_SHARED 조건 변수, PTHREADPROCESS_SHARED 상호 배율은 조건 변수를 동기화하는 두 스레드가 동일한 상호 배율을 사용해야 하기 때문입니다.
/*
* cond_attr.c
*
* main() creates a condition variable using a non-default attributes object,
* cond_attr. If the implementation supports the pshared attribute, the
* condition variable is created "process private". (Note that, to create a
* "process shared" condition variable, the pthread_cond_t itself must be
* placed in shared memory that is accessible to all threads using the
* condition variable.)
*/
#include <pthread.h>
#include "errors.h"
pthread_cond_t cond;
int main (int argc, char *argv[])
{
pthread_condattr_t cond_attr;
int status;
status = pthread_condattr_init (&cond_attr);
if (status != 0)
err_abort (status, "Create attr");
#ifdef _POSIX_THREAD_PROCESS_SHARED
status = pthread_condattr_setpshared (
&cond_attr, PTHREAD_PROCESS_PRIVATE);
if (status != 0)
err_abort (status, "Set pshared");
#endif
status = pthread_cond_init (&cond, &cond_attr);
if (status != 0)
err_abort (status, "Init cond");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.