[C++] explicit (명시적 생성자 호출)

explicit은 명시적 생성자 호출을 위한 키워드입니다. 이를 반대로 말하면, explicit 키워드를 사용하지 않으면 암시적 생성자 호출이 이루어 진다는 이야기입니다.   아래 예제 코드를 살펴 봅시다. class A { public: A (int i) : m_i (i) {} private: int m_i; }; void printA (A a) { cout << a.m_i << endl; } int main () {…

[C++] recursive_mutex

Multi Thread 환경에서는 하나의 자원을 여러 thread가 동시에 접근할 수 있어서 그에 따른 문제가 발생할 수 있습니다. 그래서 Multi Thread 환경에서는 “상호배재”를 적용해야 합니다. “상호배재”는 Mutex를 비롯하여 여러 방법으로 적용할 수 있는데, 이전 글에서 정리해 놓았습니다. Semapore, Mutex, Spin-Lock 차이점   c++ 표준 라이브러리 에서는 recursive mutex 기능을 지원합니다. mutex는 mutex lock을 실행한 thread가 자원의…

[C++] lock_guard

c++ 에서 mutex를 lock/unlock 하는 방법은 여러 방법이 있습니다. 기본적으로 C++ 표준 라이브러리의 lock(), unlock() 함수를 호출하여 제어하는 방법이 있습니다. #include <iostream> #include <thread> #include <mutex> std::mutex mtx; void function () { mtx.lock(); std::cout << “thread lock” << ‘\n’; mtx.unlock(); } int main() { std::thread t1(function); std::thread t2(function); t1.join(); t2.join(); } 하지만, 이 경우에는 lock과…

[C++] AES Encryption in C++

개요 암호화 알고리즘은 여러 가지가 있다. 그 중 암호화 깊이가 높아서 쉽게 풀리지 않는 알고리즘 중 AES 암호화를 소개하려 한다. 2001년, 미국 표준 기술 연구소(NIST)가고급 암호화 표준(Advanced Encryption Standard, AES) 이라는 이름으로 새로운 알고리즘을 공모 하였고, 이 때 Rijndael(레인달) 알고리즘이 채택되어 AES 암호화가 생겨 났다. (WIK)   AES는 DES와 마찬가지로 블록 암호화 방식이며, 다음과 같은 Mode를…

name mangling, android ndk jni symbol name problem

간혹 android ndk 를 만들다 보면 name mangling 때문에 문제를 만나게 된다. Linux 혹은 Android 에서 ndk 를 만들기 위해 library 를 빌드할 일이 있을 경우 symbol name 을 주의해야 한다.   해당 library source 는 c 혹은 cpp 형태로 작성할 수 있다. 그런데 Android NDK 를 위해서는 cpp 구조가 아닌 c 구조가 되어야 하며,…

Semapore, Mutex, Spin-Lock 차이점

Spin-lock, Semapore, Mutex는 모두 Thread/Process의 병행성을 보장하기 위한 상호배제 기법(Mutual Exclusion Techniques)이다. 이 셋의 차이점을 한번 알아보자 Mutex 하나의 자원을 통제하는데 사용 된다. 외부 변수를 두어 그 변수의 값을 조정하여(0 or 1) 자원의 접근을 제어한다. 그래서 이진 세마포어(binary semaphore)라고도 불린다. 만약, 임계 구역(Critical Section)이 잠겨있어서 진입을 하지 못하게 되면 풀릴때까지 기다린다. 이 때 문맥 교환(Context Change)이 일어난다….

베어메탈

ITWorld 용어풀이 | 베어메탈   베어메탈(Bare Metal)은 단어의 의미만으로는 다소 모호한 용어이자 표현입니다. 단어 자체만으로는 금속 뼈대가 다 드러난 상태일 수도 있고, 그저 쇳덩이뿐인 상태일 수도 있습니다. 일반적인 용어로는 금속 재질이 그대로 드러나는 상태를 의미합니다. 예를 들면, 도색을 하지 않은 자동차 차제 같은 것이 되겠죠. IT 업계에서 사용하는 베어메탈의 의미는 “어떤 소프트웨어도 담겨 있지 않은…

spinlock 종류, 차이점

  Semapore, Mutex, Spin-Lock 차이점은 다음 글에 정리되어 있다.   Spin-Lock의 종류를 알아보자. * spin_lock_irqsave()와 spin_lock_irq() 둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만, spin_lock_irqsave()는 CPU의 flag 레지스터를 보관했다가 spin_unlock_irqrestore()로 복구할 수 있다. * spin_lock()과 spin_lock_irq()의 차이는 spin_lock()은 interrupt를 disable하지 않기 때문에 interrupt handler(top half)에서는 사용할 수 없다. 대신 이때는 spin_lock_irq()나 spin_lock_irqsave()를 사용해야…