C++ (4) 썸네일형 리스트형 [C++]Linux - 스레드 동기화와 뮤텍스(Mutex) 멀티스레드를 이용하는 프로그램에서 여러개의 스레드가 공유 데이터에 접근하게 되면, 접근 시점에 따라 여러 문제가 발생할 수 있습니다.이런 문제를 해결하기 위한 일련의 작업들을 스레드 동기화(Thread Synchronization)이라고 합니다.스레드 동기화가 필요한 상황은 크게 2가지로 정리가 가능합니다.1. 둘 이상의 스레드가 공유 자원에 접근할때2. 스레드간 통신이 필요할 때(ex. 한 스레드가 작업을 완료한 후, 기다리는 다른 스레드에 알리는 경우) 아래는 리눅스에서 사용할 수 있는 여러 스레드 동기화 기법들입니다.기법설명특징주 사용 예뮤텍스 (Mutex)단일 스레드만 임계 구역에 접근 보장- 코드 간단, 직관적- 임계 구역 보호- 데드락 주의파일 읽기/쓰기, 공유 메모리 보호조건 변수특정 조건 .. 널(null) 포인터 nullptr에 대해 nullptr은 C++부터 도입된 명시적 null 포인터 상수이며, 포인터가 어떤 객체도 가리키지 않는 것을 나타냅니다.포인터를 초기화하거나 null 포인터를 표현하는데 사용합니다. 모든 포인터 타입에서 사용할 수 있습니다.다만, 아래처럼 포인터가 아닌 값을 초기화할때는 사용할 수 없습니다.int x = nullptr; //오류 발생. nullptr은 포인터로만 사용 가능함 장점NULL은 0으로 정의되어 있기 때문에, 숫자와 포인터를 혼동할 가능성이 존재했지만, nullptr은 명확히 포인터로만 사용되기 때문에, 정수와의 혼동을 방지합니다.void func(int);void func(int*);func(NULL); // 불명확: 정수 0 또는 포인터 NULL로 해석될 수 있음func(nullptr);.. const, constexpr, consteval에 대해 const변경 불가능한 값을 표시할때 사용합니다. 인터페이스를 명시할 때 주로 사용되며, const의 값은 런타임 또는 컴파일 타임에 계산될 수 있습니다. constexpr컴파일 타임에 평가되는 컴파일 타임 상수를 정의할 때 사용됩니다.상수를 명시하거나, 읽기 전용 메모리 내에 데이터를 넣을때 사용됩니다.constexpr의 값은 컴파일러가 계산해야 합니다. constexpr로 정의된 함수는 컴파일 타임 상수를 생성할때 사용할 수 있지만, 일반 함수처럼 사용도 가능합니다. 아래는 예시입니다.#include constexpr int square(int x) { return x * x;}int main() { constexpr int compileTimeValue = square(5); // 컴파일.. C++의 구조체 멤버 맞춤(Structure member alignment), 클래스 C++에서 구조체의 멤버 맞춤(alignment)은 메모리 효율성과 접근 속도를 최적화하기 위해 구조체 내 멤버들이 메모리에 배치되는 방식을 말합니다.이는 CPU가 메모리를 효율적으로 접근하기 위해 특정 크기 단위로 데이터를 배치하는 것을 요구하기 때문입니다. 기본 원칙은 구조체의 멤버 중 가장 큰 자료형의 정렬 크기(alignment requirement)에 맞춰 배치된다는 것인데, 이를 통해 CPU가 메모리 접근 시 잘못된 정렬(unaligned access)로 인해 발생하는 성능 저하를 방지합니다. 기본 규칙 • 멤버 변수는 자신의 크기 또는 구조체의 정렬 크기 중 작은 값에 맞춰 배치됩니다. • 구조체의 크기는 전체 구조체의 정렬 크기의 배수가 됩니다. 패딩(padding)멤버 변수 사이에 삽입되.. 이전 1 다음