분류 전체보기
[C++] multimap 값 가져오기
#include #include using namespace std;int main(){ multimap a; a.insert(pair(1, 2)); a.insert(pair(1, 2)); a.insert(pair(2, 4)); cout ::iterator it = a.begin(); it != a.end(); ++it) cout first second first second
[C++] volatile 키워드
개념const 키워드와 함께 변수의 성질을 바꾸는 역할을 하는 타입 한정자지만 그 사용 빈도가 낮아 책이나 자료들에서도 잘 다루어지지 않는 타입이다.volatile 키워드가 지정된 변수는 최적화를 수행하지 않는다.변수의 최적화최적화를 시켜주는 컴파일러의 기능인데 프로그래머는 사람이기 때문에 실수를 하기 마련이다. 물론 컴파일러가 모든걸 보완할 수는 없다. 예를 들면)int a;a = 0;a = 1;a = 3;a에는 최종적으로 3의 값이 들어가게 되며 이전의 작업인 0과 1은 의미가 없게 된다, 따라서 재정의를 하는 경우에는 컴파일러가 알아서 위의 두 작업을 삭제한다. 이를 통해 수행 시간의 이득을 가져올 수 있다. 하지만, 만약 메모리를 참조하여 하드웨어에 명령을 내리는 코드라고 가정하고 a를 메모리 쓰..
[실5] 11292 - 키 큰 사람
#include #include #include using namespace std;using IntPair = pair;using ll = long long;IntPair nDir[]{ {1, 0}, // 상 {-1, 0}, // 하 {0, -1}, // 좌 { 0, 1 }, // 우};int main(){ int t; while (1) { cin >> t; if (t == 0) break; multimap m; float mx = 0.f; while (t--) { string str; float val; cin >> str >> val; m.insert({ val,str }); mx = max(mx, val); } auto range = m.equal_ra..
[실3] 9711 - 피보나치
#include #include #include using namespace std;using IntPair = pair;using ll = long long;#define MAX 10001ll dp[MAX];int main(){ dp[1] = dp[2] = 1; int t, c = 1; cin >> t; while (t--) { int p, q; cin >> p >> q; for (int i = 3; i
[C++] false sharing이란? (거짓 공유)
개념false sharing은 멀티 쓰레드 환경 + CPU의 멀티 코어에서 발생된다.cpu 내부의 코어와 코어간의 메모리 정보가 공유되어 하드웨어 적으로 병목 현상이 일어나는건다.#include #include #include long long num1 = 0;long long num2 = 0;long long num3 = 0;void fun1() { for (long long i = 0; i resultTime = endTime - beginTime; printf("%lld\n", num1 + num2); std::cout 비슷하거나 빨라야 하는데 1초 차이도 아니고 6초 차이가 나버린다.CPU의 캐시 구조L3 캐시는 메모리로부터 자료를 받아온다, 그럼 해당 데이터를 L2 > L1 ..
[실4] 2578 - 빙고
#include #include #include using namespace std;#define MAX 5int main(){ map, bool> board; map> pos; for (int y = 0; y > n; pos[n] = { y,x }; board[{y, x}] = false; } } for (int y = 0; y > n; board[pos[n]] = true; // 위에서 아래로 for (int x = 0; x = 3) { cout

Atomic 연산, CAS (CompareAndSwap)에 대하여, ABA 문제
스핀락, 뮤텍스, 세마포어, 모니터 모두 하나의 Thread가 임계 영역을 Lock한 후 작업을 수행하는 절차이지만 synchronized화 하게 되면 한 개의 Thread가 해당 블락을 전체 lock(점유)하기 때문에 다른 Thread는 아무 작업을 하지 못하게 되고 이로 인해서 기다리는 상황이 발생하고 낭비가 심해진다.그래서 Non-blocking한 방법, Lock-free한 방법으로 동기화 문제를 해결하기 위한 방법이 바로 Atomic 연산이고 이 동작의 핵심 원리는 CAS (Comparre ANd Swam)에 있다.CAS (CompareAndSwap) 알고리즘이란?멀티 쓰레드 환경, 멀티 코어 환경에서 각 CPU는 메인 메모리에서 변수값을 참조하는 것이 아닌 각 CPU에서 캐시 영역에서 메모리를 ..

논 블로킹 알고리즘 (Non-blocking Algorithms)
개념동시성에서의 논 블로킹 알고리즘이란 쓰레드간의 공유된 상태(자원)로의 접근을 서로 중단없이 수행하는 것이다. (어떤 알고리즘에서 한 쓰레드의 정지가 여기에 관련된 다른 쓰레드의 정지를 유발하지 않는다)블로킹 동시성 알고리즘A: 쓰레드에 의해 요청된 동작을 수행 - 또는B: 쓰레드가 동작을 수행할 수 있을 때까지 대기 많은 종류의 블로킹 알고리즘과 동시성 블로킹 자료구조가 있다. 예를 들어, java.util.concurrent.BlockingQueue 인터페이스의 구현체들은 모두 블로킹 자료구조이다. 쓰레드가 BlockingQueue에 요소를 삽입하려 하는데 큐에 공간이 없다면 쓰레드는 공간이 생길 때까지 대기한다. 다음 다이어그램은 공유된 자료구조를 보호하는 블로킹 알고리즘의 동작을 보여준다.논 블..
블로킹과 논블로킹 큐 (Blocking/Non-Blocking Queue)
1. BlockingQueue- Queue가 꽉 찼을 때의 삽입 시도 / 비어 있을 때의 추출 시도를 막는다- 구현체 모두 Thread-safe 하다 1) ArrayBlockingQueue- 고정 배열에 일반적인 Queue를 구현한 클래스- 생성 후 크기 변경 불가 2) LinkedBlockingQueue- 선택적으로 Bound가 가능한 LinkedList로 구현한 Queue 3) PriorityBlockingQueue- PriorityQueue와 같은 정렬 방식을 지니는 용량 제한이 없는 Queue 4) SynchrousQueue- Queue 내부로의 insert 작업이 다른 쓰레드의 remove 작업과 반드시 동시에 일어나야 한다. 2. Non Blocking Queue1) ConcurrentLin..
AWS EC2 개념 정리
EC2 (Elastic Compute Cloud)란?아마존 웹 서비스(AWS)에서 제공하는 클라우드 컴퓨팅 서비스클라우드 컴퓨팅은 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공 → AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것후불제 PC방과 같이 사용한 만큼 비용을 지불하기 때문에 탄력적인 이라는 의미의 Elastic이라는 단어가 붙어있다. Elastic은 비용적인 부분 뿐만이 아니라 필요에 따라 성능, 용량을 자유롭게 조절할 수 있다는 의미도 가지고 있다사용해야 하는 이유 효율성 : 클릭 몇 번으로 서버를 생성할 수 있기 때문에 실제 서버를 구축하는 것보다 훨씬 간편하고 효율적비용 절감 : 사용한 만큼만 요금을 지불하면 되므로 비용 절감인스턴스..