프로그래밍/기록, 개념, 용어
-
포인터 에일리어스(Pointer Alias)프로그래밍/기록, 개념, 용어 2015. 2. 4. 21:20
포인터 에일리어스(Pointer Alias) 두 개 이상의 포인터 변수가 같은 메모리 위치를 담고 있을 때 그 포인터들을 에일리어스(alias)라고 부른다.컴파일러 입장에선 모든 포인터 변수가 서로의 에일리어스 일 수도 있다 생각하는 것이 안전하다. 포인터 에일리어스 발생 가능성이 높은 코드 void any_func( int* a, int* b ){ *b = *b + *a; *a = *a + 2; } 포인터 a, b가 에일리어스 상태가 아니라면 a의 값은 한 번만 로딩되면 된다. 에일리어스일 경우에는 포인터 b가 지칭하는 값에 대한 수정이 a가 지칭하는 값에 대한 수정일 수 있으므로 a의 값이 두 번 로딩되어야 한다. 포인터 에일리어싱이 가능한 코드 void func( int* a, int* b ) { ..
-
스핀락(Spinlock)프로그래밍/기록, 개념, 용어 2015. 1. 23. 14:15
스핀락(Spinlock) 스핀락(spinlock)은 바쁜 대기의 개념을 이용한 락으로, 임계 구역(critical section)에 진입이 불가능할 때 진입이 가능할 때까지 루프를 돌면서 재시도하는 방식으로 구현된 락을 가리킨다. 스핀락이라는 이름의 유래는 락을 획득할 때까지 해당 스레드가 빙빙 돌고 있다(spinning)는 것을 의미한다. 뮤텍스 락과의 차이점은 락을 얻을 수 없을때 스레드 슬립 모드로 빠지지 않고, 반복문을 계속 돌며 락을 얻으려는 시도를 한다는 것으로,락이 해제될 때 별도의 스레드 문맥교환(context switching)에 대한 오버헤드 없이 임계구역에 접근을 한다는 점이다. 뮤텍스 락의 경우, 락이 해제되더라도 운영체제에 의해 스레드가 다시 깨어나야하지만, 스핀락은 락을 얻을때까..