gcc에서만 일단 사용이 가능하지만 한가지 흥미있는 키워드를 발견했다. __builtin_expect 라는 키워드다 다음과 같이 사용할 수 있다.
void* p = malloc(100);
// if (p == NULL) // error();
if (__builtin_expect(p == NULL, 0)) error();
위와 같은 경우는 아주 많이 접할 것이다. 그런데 사실 포인터 p가 NULL인 경우는 잘 없다. 99.99%는 항상 p != NULL가 될 것이다. 이럴 경우 __builtin_expect는 매우 유용하게 사용할 수 있다. 이 키워드는 p == NULL의 값이 *대부분* false가 될 것이 라고 컴파일러에게 알려준다. 그래서 CPU가 좀 더 효율적으로 명령어를 fetch할 수 있도록 한다. 물론 그렇다고해서 프로그램의 정확성, 즉 p가 NULL이면 error가 실행되라는 것까지 해치지는 않는다. 단순히 프로그램의 성능 향상을 위한 키워드이다.
pthread 소스 보면서 찾았네요.
pthread_mutex_lock 소스가 상당히 기네요..
glibc-2.7/nptl/pthread_mutex_lock.c
int __pthread_mutex_lock (mutex) pthread_mutex_t *mutex; { assert (sizeof (mutex->__size) >= sizeof (mutex->__data)); int oldval; pid_t id = THREAD_GETMEM (THREAD_SELF, tid); int retval = 0; switch (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex), PTHREAD_MUTEX_TIMED_NP)) { /* Recursive mutex. */ case PTHREAD_MUTEX_RECURSIVE_NP: /* Check whether we already hold the mutex. */ if (mutex->__data.__owner == id) { /* Just bump the counter. */ if (__builtin_expect (mutex->__data.__count + 1 == 0, 0)) /* Overflow of the counter. */ return EAGAIN; ++mutex->__data.__count; return 0; } /* We have to get the mutex. */ LLL_MUTEX_LOCK (mutex); assert (mutex->__data.__owner == 0); mutex->__data.__count = 1; break; /* Error checking mutex. */ case PTHREAD_MUTEX_ERRORCHECK_NP: /* Check whether we already hold the mutex. */ if (__builtin_expect (mutex->__data.__owner == id, 0)) return EDEADLK; /* FALLTHROUGH */
.......
이게 LinuxThreads와 NPTL의 소스가 다 있어서 한참을 검색했는데
이렇게 하면 나오네요. NPTL을 쓰는군요
$ /lib/libpthread.so.0 Native POSIX Threads Library by Ulrich Drepper et al Copyright (C) 2006 Free Software Foundation, Inc.
데비안에서 소스 받기는
$ dpkg-query -S /lib/libpthread.so.0 libc6: /lib/libpthread.so.0 이렇게 찾고
$ apt-get source libc6 이렇게 받습니다. 압축은 푸셔야 되구요. -b 로 빌드도 같이 되게 할 수 있지만 의존성 때매 실패할겁니다
I was senseless and ignorant; I was a brute beast before you.
Yet I am always with you; you hold me by my right hand.
You guide me with your counsel, and afterward you will take me into glory.
Whom have I in heaven but you?
I only have you in my life
by Daniel
2010/01/29 00:42 [수정/삭제] [답글]
관리자만 볼 수 있는 댓글입니다.
2010/01/29 20:27 [수정/삭제]
ㅎㅎ 노트북 인기있지 남자 스타일
프리미어 시간 되면 갈쳐주세용