Reader-Writer Lock개요대부분의 확률에서는 read 할 경우에는 lock 이 없는것처럼 공유해서 사용하다가,write가 들어가면 상호배타적 특성을 지니는 lock을 적용한다#ifndef LOCK_H#define LOCK_H#include #include using Mutex = std::mutex;using CondVar = std::condition_variable;using UniqueLock = std::unique_lock;using LockGuard = std::lock_guard;/* ------------------------- RW SpinLock------------------------- *//* ------------------------------------------..
TLS 란 무엇인가스레드가 공유하는 영역은heap 영역 (new)데이터 영역 (static 변수)스레드가 개별적으로 잡는 영역은스택 (함수를 위한)TLS (데이터를 위한, 스레드 본인만의 전역 공간)이다.왜 써야할까? 언제 유용할까?공유변수를 한번 확인하고, 개별 스레드에서 요리조리 하는 상황에 유용할 것이다.요리조리할때 매번 공유되는 영역을 확인하기 위해서 lock을 잡기보다는, 캐싱해오는 개념이다네트워크 통신할때 필요한 버퍼가 그 예시이다.코드C++ 11 에서 표준 스펙으로 채택되었다 (keyword - https://en.cppreference.com/w/cpp/keyword/thread_local)thread_local int LThreadId = 0;int main(){ return 0;}스레드..
이전글 [C++] 스레드 경쟁: 스핀락, 슬립락 구현 / 이벤트, condition_variable (https://jiggyjiggy.tistory.com/137)에서, 스레드의 순서를 맞춰주기 위해 queue와 condition variable를 사용했다.하지만 그보다 가벼운 상황일때도 존재한다. produce-consume 상황이 아닌, 단발성 이벤트의 경우가 그러하다. 그럴때, future 객체를 적용하면 좋다. (condition variable 보다 가볍고, C++ 11 표준 스펙)상황#include int Calculate(){ int sum = 0; for (int i = 0; i Calculate 가 오래걸리므로, 단기알바(스레드)를 주자int main(){ int sum = Calcul..
개요멀티 스레드 환경에서는 공유 변수(데이터) 에 대한 경쟁에 대한 처리 매커니즘이 필요하다그를 위해, lock 을 이용한다 lock 을 이용하는데 사용되는 3가지 개념을 알아두자Lock 구현 이론(임계구역을 화장실이라 생각하자)존버 메타 (화장실 앞에서 대기)스핀락이 그 예시이다.busy waiting 이지만, user level 에서만 동작하므로, 다른 스레드가 lock 점유 시간이 짧을 것이라는 확신이 있다면, 좋은 선택이 될 것이다 랜덤 메타 (일단 자리로 돌아갔다올게)잠시 슬립하여 CPU 타임 슬라이스를 포기하는 것이다.이 메타는, 불확실성을 갖고있다. 슬립 사이에 다른 스레드가 들어갈 확률 존재한다갑질 메타 (화장실이 비면 종업원에게 부탁하는거)이벤트 사용으로 구현한다. (C++ 11 에서는 ..
- Total
- Today
- Yesterday
- 이진탐색
- 백준
- condition variable
- core c++
- Dispatcher Servlet
- thread
- 엔티티 설계 주의점
- 톰캣11
- tomcat11
- generic sort
- generic swap
- C
- Java
- 개발 공부 자료
- JPA
- OOP
- S1
- servlet
- reader-writer lock
- S4
- PS
- pocu
- 연관관계 편의 메서드
- Memory
- 논문추천
- 객체 변조 방어
- CPU
- tree
- Spring MVC
- sleep lock
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |