[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과…

라즈베리파이(Rasbperry pi)로 모터 제어하기 – L298N

라즈베리파이는 Model 3 B 기준으로 설명하겠다.   WiringPi 라즈베리파이에서 pin 제어를 위해서는 WiringPi 라는 라이브러리를 이용하면 편리하다. 다음은 wiringPi 설치법이다. sudo apt-get update //optional sudo apt-get upgrade //optional git clone git://git.drogon.net/wiringPi cd wiringPi git pull origin ./build   라즈베리파이는 외부 통신을 위하여 다양한 인터페이스를 가지고 있다. 이러한 인터페이스들을 wiringPi에서는 다시 매칭하고 있다. 아래는 그 내용이다….

[C++] AES Encryption in C++

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