2017. 3. 3. 18:29 기타 상식

LockFree란?

반응형

예제 및 내용 출처 : http://www.gamedevforever.com/83





비교적 최근에 알게된 개념인데 LockFree라는게 있다.



맨처음에 LockFree라는 이름만 듣고는 Lock을 안쓰는 알고리즘같은건줄 알았다.

근데 좀 딴얘기라서 당황


LockFree가 하는일은 무엇일까?

우선적으로 알아둬야 할 개념으로서 Atomic 연산이 있다.

"Atomic연산은 일련의 모든 연산이 끝나기 전에는 다른 프로세스가 해당 연산에 대해서 

어떠한 변화도 줄수 없어야 한다. 또한 전체 연산 중 어느 하나라도 실패할 경우 

모든 연산은 실패하며 시스템은 연산이 시작하기 전으로 복구되어야 한다."


사실 아직도 위글만 보면 감이 좀 안잡히는데 중요한건 아래 내용이다.

특정 값이 예상한 값과 같다면 다음단계로 넘어가고, 

만약 변경되었을 경우 해당 연산을 다시 시작하도록 한다.


윈도우에서는 CAS(Compare And Swap)을 Interlocked함수를 활용하여 구현한다


LockFree를 사용하는 이유는 어떤 블로그에서 읽었는지 기억은 안나지만 아래의 이유였다.

" LockFree는 lock을 사용않아도 되도록 하는것이 아니라 여러 스레드에서 lock을 요청할 때 

발생할 수 있는 데드락을 막고 최소한 하나의 스레드가 작업을 수행할 수 있도록 해주기 때문이다. "


사실 이 LockFree알고리즘에 대해서 ABA문제라던가 아니면 들인 노력에 비해서 미비한 효과라던가 하는 포스팅도 볼 수 있는데 이부분은 좀더 알아본 후 추가 포스팅으로 작성할 것이다.



마무리로 간단한 예제를 적어본다.

  1. void Push(Node* pNewNode)  
  2. {  
  3.  do {  
  4.    Node* t = pTopNode;  
  5.    pNewNode->pNext = t;  
  6.  } while( !CAS(&pTopNode, t, pNewNode) );  
  7. }  




반응형

'기타 상식' 카테고리의 다른 글

FirebaseMessage 란?  (0) 2019.07.31
멀티 스레드에 관해서  (0) 2019.07.14
ORM이란?  (0) 2019.06.23
메모리 거짓 공유란?  (0) 2017.01.13
Concurrency와 Parallelism의 차이에 대하여  (0) 2017.01.12
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함