본문 바로가기
반응형
[C++ 마스터] Day 26: 멀티스레딩과 동기화 멀티스레딩 (Multithreading)멀티스레딩은 하나의 프로그램이 동시에 여러 작업을 수행할 수 있도록 하는 기능입니다. C++11부터 표준 라이브러리는 멀티스레딩을 지원하는 다양한 기능을 제공합니다. 주요 클래스와 함수로는 thread, mutex, lock_guard, unique_lock 등이 있습니다. 1. 스레드 (Thread)스레드는 프로그램의 실행 단위를 나타냅니다. std::thread 클래스를 사용하여 스레드를 생성할 수 있습니다. 1.1 스레드 생성#include #include using namespace std;void printMessage(const string& message) { cout  2. 뮤텍스 (Mutex)뮤텍스는 상호 배제를 제공하여, 여러 스레드가 동시에.. 2024. 8. 1.
[C++ 성능 최적화 및 고급 테크닉] Day 26: 프로젝트: 고성능 매트릭스 라이브러리 개발 (3) 프로젝트 목표이 단계에서는 매트릭스 라이브러리의 성능을 더욱 향상시키기 위해 추가적인 최적화 기법을 적용하고, 병렬 프로그래밍을 도입합니다. 특히, 다음과 같은 부분을 다룹니다:병렬 프로그래밍 도입: OpenMP를 사용하여 병렬로 행렬 연산을 수행합니다.매트릭스 라이브러리 완성: 라이브러리의 다양한 기능을 통합하고 최적화합니다. Step 1: 병렬 프로그래밍 도입OpenMP를 사용하여 행렬 덧셈과 행렬 곱셈을 병렬로 수행하도록 수정합니다. Matrix.cpp: 병렬 행렬 덧셈#include "Matrix.h"#include Matrix operator+(const Matrix& lhs, const Matrix& rhs) { if (lhs.getRows() != rhs.getRows() || lhs... 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 26: C++로 네트워크 프로그래밍 (소켓 프로그래밍) 소켓 프로그래밍 소개소켓 프로그래밍은 네트워크를 통해 통신하는 소프트웨어를 작성하는 기술입니다. C++에서는 Berkeley 소켓 API를 사용하여 소켓 프로그래밍을 구현할 수 있습니다. 오늘은 TCP/IP 소켓을 사용하여 간단한 클라이언트-서버 애플리케이션을 구현해보겠습니다. TCP 서버 구현1. 서버 소켓 설정TCP 서버는 클라이언트 연결을 수락하고 데이터를 주고받습니다. 서버는 다음 단계를 통해 구현됩니다.소켓 생성소켓 바인딩소켓 리스닝클라이언트 연결 수락데이터 송수신tcp_server.cpp#include #include #include #include #include #define PORT 8080int main() { int server_fd, new_socket; struct so.. 2024. 8. 1.
[C++ 네트워크 프로그래밍] Day 26: 프로젝트: 서버 개발 (2) 실시간 채팅 애플리케이션 서버 개발 (계속)이전 단계에서는 기본적인 메시지 중계와 사용자 이름 관리를 구현했습니다. 이번 단계에서는 서버에 더 많은 기능을 추가하고, 개선하겠습니다.추가 기능 요구사항사용자 목록 관리: 현재 접속해 있는 사용자 목록을 관리하고 클라이언트에게 제공해야 합니다.연결 및 연결 해제 알림: 사용자가 연결되거나 연결이 해제될 때 모든 사용자에게 알림을 보냅니다.메시지 포맷 관리: JSON 형식의 메시지를 사용하여 메시지를 구조화합니다.서버 클래스 다이어그램 (업데이트)+-------------------+| ChatServer |+-------------------+| +start() || +stop() || -accept() .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 26: 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm) 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)플로이드-워셜 알고리즘은 모든 정점 쌍 간의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 음의 가중치가 있는 그래프에서도 작동하지만, 음의 사이클이 있는 그래프에서는 사용할 수 없습니다.플로이드-워셜 알고리즘의 시간 복잡도:(O(V^3)), 여기서 (V)는 정점의 수입니다.플로이드-워셜 알고리즘 구현그래프 구현 (인접 행렬 사용)#include #include #include // 무한대 값을 나타내는 상수const int INF = INT_MAX;// 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(int u, int v, int weight); // .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 26: 선형 계획법 (Linear Programming) 선형 계획법 (Linear Programming)선형 계획법은 주어진 선형 제약 조건하에서 선형 목표 함수를 최적화(최대화 또는 최소화)하는 문제를 해결하는 기법입니다. 선형 계획법은 경제학, 운영 연구, 엔지니어링 등 다양한 분야에서 사용됩니다. 가장 널리 알려진 방법은 단체법 (Simplex Method)과 내부 점 방법 (Interior Point Method)입니다.선형 계획법 문제 정의일반적인 선형 계획법 문제는 다음과 같이 정의됩니다:[\begin{aligned}& \text{Maximize (or Minimize)} \quad & c^T x \& \text{subject to} \quad & Ax \leq b \& & x \geq 0\end{aligned}]여기서 (c)는 목표 함수의 계수 .. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 26: FreeRTOS를 이용한 멀티태스킹 FreeRTOS 멀티태스킹 개요FreeRTOS는 실시간 운영 체제(RTOS)로, 임베디드 시스템에서 멀티태스킹을 구현할 수 있는 기능을 제공합니다. 오늘은 FreeRTOS의 다양한 기능을 활용하여 멀티태스킹 시스템을 더욱 효율적으로 구현하는 방법을 학습하겠습니다.1. FreeRTOS의 주요 기능태스크 관리: 여러 개의 태스크를 생성하고 스케줄링태스크 간 통신: 큐(Queue), 세마포어(Semaphore), 뮤텍스(Mutex)를 사용하여 태스크 간 데이터를 주고받고 동기화타이머: 주기적으로 실행되는 타이머 기능2. 태스크 간 통신FreeRTOS에서 태스크 간 통신을 위해 큐(Queue)를 사용할 수 있습니다. 큐는 데이터를 FIFO(First In, First Out) 방식으로 저장하여, 한 태스크에서 .. 2024. 8. 1.
[C++ 게임 개발 시리즈] Day 26: 3D 게임 프로젝트 시작 (3) 3D 게임 프로젝트 시작 (3)어제는 3D 게임 프로젝트에 카메라 컨트롤과 조명을 추가하여 장면을 더욱 현실감 있게 만드는 방법을 학습했습니다. 오늘은 추가 기능을 구현하여 게임을 더욱 발전시키겠습니다. 적 캐릭터의 AI와 간단한 충돌 처리를 추가하겠습니다.적 캐릭터 AI 구현적 캐릭터는 플레이어를 추적하고 공격하는 간단한 AI를 가집니다. 이를 위해 적 캐릭터가 플레이어의 위치를 추적하고 일정 거리 안으로 들어오면 공격하는 동작을 구현합니다. Enemy 클래스 작성Enemy 클래스를 작성하여 적 캐릭터의 위치와 AI 동작을 관리합니다.#ifndef ENEMY_H#define ENEMY_H#include class Enemy {public: glm::vec3 Position; float Spe.. 2024. 8. 1.
[C++ 마스터] Day 27: 최신 C++ 표준 (C++11, C++14, C++17, C++20) 기능 소개 C++11 기능C++11은 C++ 언어에 많은 중요한 기능을 도입했습니다. 주요 기능 중 일부를 살펴보겠습니다. 1. 자동 타입 추론 (auto)auto 키워드는 변수의 타입을 자동으로 추론합니다.#include #include using namespace std;int main() { auto x = 10; // int로 추론 auto y = 3.14; // double로 추론 auto z = "Hello, World!"; // const char*로 추론 cout  2. 람다 함수 (Lambda Functions)람다 함수는 익명 함수로, 함수 객체를 간단하게 정의할 수 있습니다.#include #include #include us.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 27: C++에서의 데이터베이스 연동 (SQLite, MySQL) SQLite 소개SQLite는 경량의 자체 포함형 SQL 데이터베이스 엔진입니다. 서버가 필요 없으며, 데이터베이스가 하나의 파일로 저장됩니다. SQLite는 임베디드 시스템 및 소형 애플리케이션에 적합합니다. SQLite 설치 및 설정SQLite 설치리눅스 환경에서 SQLite를 설치하려면 다음 명령어를 사용합니다.sudo apt-get install sqlite3 libsqlite3-dev SQLite와 C++ 연동SQLite와 C++을 연동하여 데이터베이스를 사용하려면 sqlite3.h 헤더 파일과 libsqlite3 라이브러리를 사용해야 합니다. 1. 데이터베이스 연결 및 테이블 생성다음 코드는 SQLite 데이터베이스에 연결하고, 테이블을 생성하는 예제입니다. sqlite_example.cpp#.. 2024. 8. 1.
반응형