전체 글 101

[C#] 스레드 동기화(Thread synchronization)-Mutex

스레드를 동기화하는 방법으로 Mutex 클래스도 있다.Mutex 역시 크리티컬 섹션에 들어가는 스레드를 제어하여 동기화하는 역할을 한다. 스레드가 mutex를 획득하면 해당 스레드가 mutex를 해제할 때까지 다음 스레드는 중단된다.Mutex는 Monitor와 달리 프로세스 간 동기화에도 사용할 수 있다. 프로세스 내에서 스레드의 동기화를 담당하는 mutex를 local mutex라 하며, 프로세스 간 동기화를 담당하는 mutex는 named mutex라고 한다.  WaitOne(), ReleaseMutex()Mutex 클래스를 사용하여 동기화를 구현하기 위해서는 WaitOne()과 ReleaseMutex() 메서드를 알아야 한다.WaitOne()은 스레드가 mutex에 소유권을 요청하는 메서드이다. m..

개발언어/C# 2024.05.17

[C#] 스레드 동기화(Thread synchronization)-Monitor

이번에는 스레드 동기화로 monitor 클래스에 대해 알아보도록 하자. monitor는 lock처럼 크리티컬 섹션(critical section)을 locking하는 기능을 제공하고 있다. monitor를 사용하여 동기화하는 방법으로 Enter()와 Exit(), Wait()와 Pulse()/PulseAll()이 있다.  Enter(), Exit()Enter()는 지정된 개체를 locking하는 기능을, Exit()는 지정된 개체의 lock을 해제하는 기능을 제공한다. 실제로 Monitor.Enter()과 Monitor.Exit()는 C#의 lock 기능과 동일하다.  using System;using System.Threading;namespace TestThread{ public class Ac..

개발언어/C# 2024.05.17

[C#] 스레드 동기화(Thread synchronization)-lock

스레드는 비동기식으로 여러 스레드가 동시에 실행될 수 있다. 비동기란 처리할 작업을 요청하였을 때, 결과를 반환받지 않아도 다른 작업들을 동시에 수행하는 것을 의미한다. (반대로 동기는 요청한 작업의 결과를 받을 때까지 다른 작업을 수행하지 않는 것을 의미한다.) 비동기로 수행될 경우, 동시에 여러 작업들을 수행할 수 있어 성능상의 이점이 있지만, 여러 작업들이 공유 자원에 접근할 때 오류가 발생할 수 있다. 모임통장을 사용한 예를 들어보자. 여섯명이 동시에 다음과 같은 일을 수행하였다고 하자.using System;using System.Threading;namespace TestThread{ public class Account { int money = 10000; ..

개발언어/C# 2024.05.16

[프로그래머스/C++] 혼자서 하는 틱택토

문제https://school.programmers.co.kr/learn/courses/30/lessons/160585 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   코드#include #include #include using namespace std;int dr[] = {1,0,1,1};int dc[] = {0,1,1,-1};int dfs(int r, int c, int depth, vector board, char ch, int idx){ if(depth==3) return 1; if(board[r][c]==ch){ ..

[프로그래머스/C++] 인사고과

문제https://school.programmers.co.kr/learn/courses/30/lessons/152995?language=cpp# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  코드#include #include #include using namespace std;int cmp(vector a, vector b){ if(a[0]!=b[0]) return a[0]>b[0]; else return a[1]>b[1];}int solution(vector> scores) { int answer = 0; ..

[C#] 어트리뷰트(Attribute)

어트리뷰트(Attribute)어트리뷰트(attribute)란 프로그램 및 프로그래밍 요소(클래스, 속성, 메서드, 이벤트 등)에 메타데이터를 추가하는 기능을 의미한다. 메타데이터란 프로그램에 정의된 형식에 대한 정보를 의미한다. 어트리뷰트를 사용할 때에는 기본적으로 사용하고자 하는 요소 위에 [어트리뷰트이름(매개변수)] 형태로 사용하면 된다. 어트리뷰트는 .NET에서 기본적으로 제공하는 어트리뷰트와 사용자 정의로 사용할 수 있는 어트리뷰트가 있다.  공통 어트리뷰트.NET에서 기본적으로 제공하는 어트리뷰트는 다음과 같다.(이외에도 더 있음)ObsoleteAttribute이제는 쓸 수 없는 요소임을 경고 메시지를 통해 나타냄SerializableAttribute클래스를 직렬화 할 수 있음을 나타냄DllIm..

개발언어/C# 2024.05.09

[C#] 리플렉션(Reflection)

리플렉션(Reflection)리플렉션이란 런타임 중에 객체의 형식(클래스, 인터페이스, 값 형식)에 대한 정보를 가져올 수 있는 기능을 의미한다. 리플렉션을 사용하면 동적으로 형식을 가져올 수 있고, 형식에 대한 인스턴스를 생성할 수 있다. 런타임 내에서 동적으로 기능하기 때문에 성능상 좋지 않다는 단점을 가지고 있다. 주로 테스트, 디버그 용도로 사용한다.(테스트가 끝나면 관련 부분은 주석처리 해주는 것이 좋다.) 리플렉션을 사용하려면 네임스페이스로 System.Reflection을 추가해야 한다.  GetTypeGetType()이란 이름 그대로 해당 type 개체를 가져오는 메서드이다.using System;using System.Collections.Generic;using System.Linq;u..

개발언어/C# 2024.05.08

[프로그래머스/C++] 과제 진행하기

문제https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  코드#include #include #include #include using namespace std;int cmp(vectora, vectorb){ return a[1] solution(vector> plans) { vector answer; sort(plans.begin(), plans.end(), cmp); stack> s; int cur_time = stoi..

[프로그래머스/C++] 바탕화면 정리

문제https://school.programmers.co.kr/learn/courses/30/lessons/161990?language=cpp 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  코드#include #include using namespace std;vector solution(vector wallpaper) { vector answer; int min_x = 50, min_y=50, max_x=0, max_y=0; for(int i=0;i  풀이내 주제를 깨닫고 쉬운 문제를 풀었다.그림으로 보아도 알 수 있다시피 모든 파일을 전..

[프로그래머스/C#] 카드 뭉치

문제 https://school.programmers.co.kr/learn/courses/30/lessons/159994 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 using System; public class Solution { public string solution(string[] cards1, string[] cards2, string[] goal) { string answer = ""; int idx1 = 0; int idx2 = 0; for(int i=0;i