일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 벡터와 리스트의 차이
- C++
- c++ 정보은닉
- stencil buffer
- react native accessible
- react native 타입스크립트
- react native
- unity stencil buffer
- CSS
- c++ using
- GitHub
- node.js
- html
- javascript
- react native mac
- 리액트 네이티브 설치 오류
- 스탠실 버퍼 사용
- 싸이월드
- react native typescript navigate
- react
- react native typescript navigation
- react native ios 기기 연결
- 리액트 네이티브 맥
- node
- react-native
- 스탠실 버퍼 튜토리얼
- react native typescript
- Expo
- cyworld
- 스탠실 버퍼 시작
- Today
- Total
혀니의 이거저거 뿌시기
Lock free queue / Atomic 메모리 모델 / ABA 본문
https://velog.io/@cedongne/Server-Lock-free
1.lock free
여러개의 쓰레드에서 동시에 호출했을 때에도 정해진 단위마다 적어도 한개의 호출이 완료되는 알고리즘
멀티쓰레드 환경에서 다른 쓰레드가 플래그를 세팅해주고, lock을 풀어주는 등 다른 쓰레드가 끝나고 자기 순서가 오기를 기다리지 않는 non-blocking이 보장되어야 lock-free가 될 수 있음
특정 작업을 동시에 여러 쓰레드가 호출했을 때 적어도 하나는 완료해서 반환하는 것.
그 알고리즘을 queue로 구현한 것이 lock free queue.
https://velog.io/@codingskynet/C11-Memory-Model-Atomic%EB%B6%80%ED%84%B0-Lock-Free-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EA%B9%8C%EC%A7%80
2.Atomic 메모리 모델
멀티코어적으로 프로그램을 실행하고자 할 때(동시성 프로그래밍) 하나의 변수에 두 개의 쓰레드가 1000번씩 +1해줄 때
실제론 2000이 나오지 않고 더 작거나 같은 수가 나옴
이유: 우리가 예상하는 것과 달리 각 쓰레드에서 count값을 읽어오는 과정에서 그 과정이 씹히기 때문에
이러한 상황을 막기 위해 쪼갤 수 없는 가장 단위로 과정을 쪼개지 않아 2000이 나오게 하는 것
https://wannabe-gosu.tistory.com/29
3.ABA
Lock free 알고리즘같은 것을 구현할 때 CAS(Compare And Swap)을 사용해서 자료구조의 아이템 변경할 때
포인터가 시스템에 의해 재사용되면서 생기는 문제
해결 방법으로는 double check CAS 등이 있다.
[Server] Lock-free
멀티쓰레드를 사용하면서 제대로 된 성능 향상을 가져오는 Lock-free에 대해 알아보자.
velog.io
'CS > 운영체제' 카테고리의 다른 글
입출력 (콘솔입출력, 파일입출력) (1) | 2024.01.24 |
---|---|
IOCP (0) | 2024.01.09 |
도커와 컨테이너의 이해 (0) | 2023.12.20 |
대칭키 vs 비대칭키 (1) | 2023.12.20 |
프로세스가 메모리에 올라가는 방법 (+가상메모리 + 프로그램/프로세스 차이) (0) | 2023.12.18 |