본문 바로가기

전체 글199

모바일 가상 조이스틱 구현 public class VirtualJoystick : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { [SerializeField] private RectTransform lever; private RectTransform rectTransform; [SerializeField, Range(10, 150)] private float leverRange private Vector3 inputDirection; public Vector3 InputDirection { get { return inputDirection; } } public void OnBeginDrag(PointerEventData eventData) { Managers... 2024. 4. 20.
동기화 동기화란? 1. 프로세스나 스레드의 실행 순서를 제어 ex) Reader 작업을 하는 스레드와 Writer 작업을 하는 스레드가 있을 때 Writer 작업이 먼저 끝나야지 Reader 작업을 해야한다고 했을 때 동시에 실행 될 수 있는 스레드를 작업 순서대로 진행하게 함 2. 동시에 접근해서는 안 되는 자원에 하나의 프로세스 또는 스레드만 접근하게 하기 동시에 접근해서는 안되는 자원 즉, 공유자원(전역변수, 파일, DB ..등)의 동시 접근을 막는 것이다. 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 "임계 구역"이라고 한다. 두 개 이상의 스레드가 임계 구역에 진입하고자 하면 둘 중 하나는 대기해야 됨 여러개의 스레드가 동시에 "임계 구역"의 코드를 실행해서 문제가 발생하는 경우 이를 .. 2024. 4. 18.
멀티스레드 InterLocked namespace ServerCore { class Program { static int number = 0; static void Thread_1() { for (int i = 0; i < 100000; i++) { number++; } } static void Thread_2() { for (int i = 0; i < 100000; i++) { number--; } } static void Main(string[] args) { Task t1 = new Task(Thread_1); Task t2 = new Task(Thread_2); t1.Start(); t2.Start(); Task.WaitAll(t1, t2); Console.WriteLine(number); } } } 1씩 100,000 번을 더.. 2024. 4. 18.
메모리 배리어 1. 메모리 배리어 정의 중앙처리장치(CPU)나 컴파일러에게 특정 연산의 순서를 강제하는 기능 2. 메모리 배리어가 없을시의 문제점 중앙처리장치와 컴파일러는 멀티스레드 환경에서 개발자가 의도한 로직 순서를 뒤바꿀 수도 있는데 로직 실행 순서가 바뀌어 실행된다면 잘못된 결과가 발생할 수 있다. 3. 메모리 배리어의 용도 - 코드 재배치 억제 int a = 0; void Thread_A() { a = 10; console.writeLine(a); } void Thread_A() { a = 10; Thread.MemoryBarrier(); console.writeLine(a); } 멀티 스레드 환경에서 메모리 배리어가 없으면 무조건 "a=10" 라는 연산이 처음부터 실행되는 게 아니라 "console.writ.. 2024. 4. 18.
백준 2178 1. 문제 이해 이 문제는 BFS를 응용해서 풀 수 있다. 시작지점부터 인접한 곳으로 이동할 때마다 거리를 1씩 증가시키면 된다. 연결된 칸들을 모두 방문한 경우 각 끝지점에서 시작지점을 빼면 시작지점으로 부터 몇 칸 이동했는지 알 수 있다. 이걸 이용해서 (1,1) ~ (N,M) 까지의 거리를 구할 수 있다. 2. 코드 #include #include #include using namespace std; #define X first #define Y second // 상하좌우 네 방향을 고정 // (1,0) : 우, (0,1) : 상, (-1,0) : 좌, (0,-1) : 하 int dx[4] = { 1,0,-1,0 }; int dy[4] = { 0,1,0,-1 }; // 배열의 크기를 문제와 딱 맞게.. 2024. 4. 18.
BFS(Breadth First Search) 1. BFS 설명 다차원 배열에서 각 칸을 방문할 때 너비를 우선으로 방문하는 알고리즘 원래 BFS는 그래프라는 자료구조에서 모든 노드를 방문하기 위한 알고리즘이지만 그래프 자료구조를 알아야 되기 때문에 다차원 배열에서의 BFS를 예시로 설명함 1. 시작하는 지점을 방문했다는 표시를 남기고 큐에 넣음 2. 큐에 있는 front를 pop하고 pop한 원소의 상하좌우 칸을 확인 -> 파란색이면서 아직 방문하지 않은 칸이 있으면 방문했다는 표시를 남기고 큐에 넣음 3. 2번을 계속해서 실행하다가 큐가 비어(front 할 것이 없음)있다면 BFS 알고리즘 종료 BFS의 시간복잡도는 방문했다는 표시를 남기기 때문에 모든 칸은 큐에 1번씩만 들어가게 되고 칸이 N개일 때 O(N)이 된다. 다차원 배열에서 행이 R개.. 2024. 4. 18.