본문 바로가기

한국으로74

4.2 스레드 동기화 4.2 스레드 동기화4.2.1 뮤텍스 함수int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutex_attr attr);기능: 뮤텍스 초기화 int pthread_mutex_lock(pthread_mutex_t* mutex);기능: 뮤텍스 획득 int pthread_mutex_unlock(pthread_mutex_t* mutex);기능: 뮤텍스 반납 int pthread_mutex_destroy(pthread_mutex_t* mutex);기능: 뮤텍스 비활성화 리턴: 성공 시 0, 에러 시 에러번호 리턴mutex: 뮤텍스 변수 주소attr: 뮤텍스 속성 (일반적으로 NULL) 4.2.2 POSIX 이름있는 세마포어세마포어 파일을 매개로 동기화 .. 2018. 6. 28.
4.1 스레드란? 4.1 스레드란?4.1.1 POSIX 스레드리눅스는 POSIX 표준인 POSIX 스레드(PThread)를 사용한다.POSIX 스레드는 병렬적으로 작동하는 소프트웨어의 작성을 위해 제공되는 표준 API임.스레드는 하나의 프로세스 내에서 동작을 여러 개 진행한다. 기본적으로 하나의 프로세스는 하나의 스레드를 갖고, 추가로 스레드를 생성하는 개념임.스레드들은 하나의 프로세스 내의 자원을 공유함. 커널은 프로세스 단위가 아닌 이러한 스레드 단위로 관리 및 스케줄링한다. (커널 안에서는 태스크라는 용어 사용)스레드는 개별적인 프로그램 카운터와 스택을 가지므로 독립적으로 실행하지만,자원을 공유하기 때문에 동기화 문제가 발생한다. 4.1.2 스레드의 장단점장점쉬운 자원 공유쉬운 스케줄링작은 비용으로 구현단점동시성 문.. 2018. 6. 27.
3.4 메시지 큐 3.4 메시지 큐3.4.1 개요프로세스 간 자료 교환하기메시지 큐에 연결된 프로세스들은 메시지를 서로 보내고 받을 수 있다. 메시지 큐는 커널 영역에 존재.프로세스는 유저 영역에 존재. 소량의 데이터를 간단히 보낼 때 메시지 큐를 사용하자!메시지 큐는 동기화 문제가 없기 때문에 간단히 구현할 수 있다.반대로 공유 메모리는 대량의 데이터를 주고받을 때 사용한다. 3.4.2 메시지 큐 함수int msgget(key_t key, int msgflg);기능: 메시지 큐 생성리턴: 성공 시 메시지 큐 ID, 실패 시 errno 설정 후 -1 리턴key: 메시지 큐 접근 키msgflg: IPC_CREAT (메시지 큐가 없으면 새로 생성), IPC_CREAT | IPC_EXCL (메시지 큐가 있으면 에러) int m.. 2018. 6. 27.
3.3 공유 메모리 3.3 공유 메모리3.3.1 개요 프로세스는 독립적인 주소공간(가상메모리)를 사용하기 때문에 변수를 공유할 수 없다.공유 메모리를 통해 프로세스간 공유할수 있는 메모리를 구현하자!각 프로세스는 자신의 주소 공간에 공유메모리를 위한 세그먼트(shmbuf)를 만들고, 이 구조체를 통해 공유메모리에 접근한다. # ipcs -l현재 공유 메모리의 정보를 확인하자 3.3.2 공유메모리 함수int shmget(key_t key, size_t size, int shmflg);기능: 공유메모리 생성리턴: 성공 시 공유메모리 ID, 실패 시 errno 설정 후 -1 리턴key: 공유메모리 접근 키size: 생성할 공유메모리 크기shmflg: IPC_CREAT (공유메모리가 없으면 새로 생성), IPC_CREAT | IP.. 2018. 6. 27.