23.11.14 최초 작성
pthread_create 스레드 생성#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start)(void *), void *arg);
///
*thread : 스레드의 ID를 저장하는 공간
*attr : 스레드의 속성
start : 실행할 함수의 주소
arg : 실행할 함수의 인자
Return
(0 : Success, else : Fail)
pthread_join : 지정한 스레드가 종료할 때까지 대기#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
///
thread : 스레드의 ID
retval : 스레드의 결과값을 저장할 공간
Return
(0 : Success, else : Fail)
pthread_detach : join을 호출하지 않아도 프로그램이 종료할 때 자동적으로 스레드가 끝나도록 설정하는 함수join을 할 수 없음#include <pthread.h>
int pthread_detach(pthread_t thread);
///
thread : 스레드의 ID
Return
(0 : Success, else : Fail)
simple_thread : 문자열을 출력하는 스레드를 생성하는 코드#include <pthread.h>
#include "tlpi_hdr.h"
static void *
threadFunc(void *arg)
{
char *s = arg;
printf("%s", s);
return (void *) strlen(s);
}
int
main(int argc, char *argv[])
{
pthread_t t1;
void *res;
int s;
s = pthread_create(&t1, NULL, threadFunc, "Hello world\n");
if (s != 0)
errExitEN(s, "pthread_create");
printf("Message from main()\n");
s = pthread_join(t1, &res);
if (s != 0)
errExitEN(s, "pthread_join");
printf("Thread returned %ld\n", (long) res);
exit(EXIT_SUCCESS);
}
detached_attrib : pthread_detach를 통해 프로그램 종료 시 스레드도 종료되도록 설정한 코드#include <pthread.h>
#include "tlpi_hdr.h"
static void *
threadFunc(void *x)
{
return x;
}
int
main(int argc, char *argv[])
{
pthread_t thr;
pthread_attr_t attr;
int s;
s = pthread_attr_init(&attr); /* Assigns default values */
if (s != 0)
errExitEN(s, "pthread_attr_init");
s = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (s != 0)
errExitEN(s, "pthread_attr_setdetachstate");
s = pthread_create(&thr, &attr, threadFunc, (void *) 1);
if (s != 0)
errExitEN(s, "pthread_create");
s = pthread_attr_destroy(&attr); /* No longer needed */
if (s != 0)
errExitEN(s, "pthread_attr_destroy");
s = pthread_join(thr, NULL);
if (s != 0)
errExitEN(s, "pthread_join failed as expected");
exit(EXIT_SUCCESS);
}
phread_mutex_init : 뮤텍스 초기화pthread_mutex_destroy : 뮤텍스 삭제#include <pthread.h>
pthread_mutex_t = PTHREAD_MUTEX_INITIALIZER; //전역변수로 바꾸는 방법
int phread_mutex_init(pthread_mutex_t *mutex, const int pthread_mutexattr_t *attr);
//mutex 초기화
int pthread_mutex_destroy(pthread_mutex_t *mutex); //
///
mutex : 초기화 또는 삭제할 뮤텍스를 지정
*attr : 뮤텍스 속성 오브젝트를 지정
Return
(0 : Success, else : Error)
pthread_cancel : 스레드 취소#include <pthread.h>
int pthread_cancel(pthread_t thread);
///
Return
(0 : Success, else : Error)
pthread_mutex_lock : 스레드가 lock 획득pthread_mutex_unlock : 스레드가 lock 반환#include <pthread.h>
int pthread_mutex_lock(pthread_mutex *mutex);
int pthread_mutex_unlock(pthread_mutex *mutex);
///
Return
pthread_cond_signal, pthread_cond_broadcast : 스레드에게 시그널을 보내서 pthread_cond_wait으로 대기중인 스레드 깨움
pthread_cond_wait 시그널이 올 때 까지 기다림
#include <pthread.h>
int pthread_cond_signal(pthread_cond_t *cond); //하나의 스레드 대상
int pthread_cond_broadcast(pthread_cond_t *cond); //모든 스레드 대상
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *timeout);
///
cond : 신호에 대한 조건 지정
mutex : 잠긴 뮤텍스 지정
timeout : 차단된 상태 제한시간을 지정
Return
(0 : Success, else : Error)
#include <pthread.h>
///
Return
#include <pthread.h>
///
Return