C 프로젝트/리눅스 프로그래밍 썸네일형 리스트형 Thread Safe 공유메모리,정적 객체를 사용하는 경우 쓰레드에 안전하지 않다.예) strtok.이럴 경우, 재진입성 ( reentrancy ) 을 보장하도록 형태를 취하여 쓰레드 안전을 취하는 경우 독립적인 처리가 가능하다. 쓰레드에 안전하지 않은 함수에, 뮤텍스를 통해 쓰레드 안전을 유지하려는 경우예를 들어 전역으로 선언된 큐에 여려 개의 쓰레드가 큐에 아이템을 넣거나 빼는 작업을 하는 경우가 있다는 가정일때큐에 접근하는 쓰레드들이 큐를 변경시키는 모든 행위는 배타적으로 진행되어야 함으로 뮤텍스로 보호되어야 한다.하지만 공유 자원을 보호하는 데 있어서 뮤텍스를 적용하는 것이 능사만은 아니다. 예를 들자면 TCP/Ip 네트워크 통신을 하는 코드에 멀티 쓰레드를 도입 하고 Send 함수에 뮤텍스로 보호했다고 가정 한다면S.. 더보기 epoll epoll 의 특징은 stateful 함수로서 호출할 때마다 커널 영역과 유저 영역 사이에 모든 파일 기술자 정보 리스트와 부가적인 정보를 복사하는 오버헤드가 없다. 파일 기술자를 등록, 해제, 변경 하는 함수와 이벤트를 감시하는 함수가 분리되었고 메모리 복사의 부담이 많이 줄어 들었다.그리고 엣지 트리거의 지원이 추가 되었다. 물론 기본값으로는 레벨 트리거를 지원하고 있다 ( 용어 해설 ) 레벨 트리거 : 일정한 전위 수준을 넘었는지 감지엣지 트리거 : 전위차가 발생하는 엣지 부분에서 상태 변화를 감지 epoll function int epoll_create(int size); - > 커널 객체 공간 확보 int epoll_ctl (int epfd, int op, int fd, struct epoll_.. 더보기 Socket Non-blocking 일반적으로 모든 파일과 소켓은 기본값으로 블럭킹 모드를 사용하게 된다.이는 1:1 통신이나 외부 개입이 없는 프로그램이라면 별로 문제가 없을 것이지만, 이러한 구조는 희박하다.따라서 여러개의 소켓을 가지고 통신을 한다면 처리할 데이터가 없는 경우에는 recv 에서 바로 빠져 나와 다른 소켓을 처리할 수 있는방식인 Non-Blocking 방식으로 변경 한다. 일반 파일일 경우만 처음부터 Non-Blocking 모드로 열 수 있으며, 소켓 같은 경우, fcntl () 함수를 이용해서 넌블록킹으로 전환해야 한다.fcntl()에 F_GETFL 인수를 사용하면 기존 플래그 값을 읽어올 수 있다. 여기에 O_NONBLOCK 옵션 플래그를 OR 연산으로 더해주고F_SETFL로 파일 기술자에 플래그를 적용하면 넌 블럭.. 더보기 C 라이브러리 - 패턴 매칭 사용 예제 regex_t rx; regmatch_t pmatch[2]; unsigned len = strlen((unsigned char *)ptr); if (len 더보기 C 라이브러리 - 패턴 매칭 1. 정규식 매칭 GNU C 라이브러리는 정규식을 매치하기 위한 두 개의 인터페이스를 제공한다.하나는 POSIX2 인터페이스이고 다른 하나는 GNU 시스템이 오랫동안 가지고 있었던 것이다두개의 인터페이스는 헤더파일 "regex.h"에 선언되어 있다. 데이터 타입 : regex_t 이것은 컴파일된 정규식을 저장하는 오브젝트 타입이다. 그것은 실제로 구조체이다. int regcomp (regex_t *compiled, const char *pattern, int cflags)regcomp 함수는 문자열과 매치시키는데 사용하는 regexec를 사용할 수 있도록 정규식을 데이터 구조체로 "컴파일"한다. 컴파일된 정규식의 형식은 매칭(matching)에 효율적이게 만들어졌다. regcomp는 *compiled에 .. 더보기 조건 변수 , 뮤텍스 pthread_cond_wait는 thread를 휴먼 상태로 만듭니다, (해당 라인에서 thread의 동작이 멈추는 상태) 이 말은, 일종의 sleep 상태라고 생각해도 되는데, 휴먼 상태에 빠져 있는 이 thread는 다른 thread에서 pthread_cond_signal을 이용해서 깨웁니다, (깨워지게 되면, 그때 부터 pthread_cond_wait 의 다음 라인 코드가 실행됩니다) 그렇다면 다수의 pthread_cond_wait가 존재한다면, pthread_cond_signal은 어떤 pthread_cond_wait를 깨울까요? 걱정하지 마시라~, 답은 아래 있습니다. 일단 함수 생김새를 살펴보면 아래와 같고, int pthread_cond_signal(pthread_cond_t *cond); .. 더보기 이전 1 다음