개발언어 7

[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#] 어트리뷰트(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#] 스레드(Thread) 사용하기 - 생성, 일시 중단, 중단, 백그라운드 스레드

스레드(Thread) 스레드(Thread)란 프로세스 내부에서 수행되는 작업 단위를 의미하며, 프로세스는 하나 이상의 스레드를 가지고 있다. 스레드는 비동기식(asynchronous)으로 수행되어 동시에 처리되는 병렬성을 가지고 있다. 스레드 사용하기 C#을 사용하여 스레드를 사용하는 법에 대해 알아보자. 스레드 생성 스레드 사용을 위해 System.Threading 네임스페이스 추가한다. Thread thr을 생성과 동시에 초기화해준다. 스레드 생성자의 매개변수는 ThreadStart의 대리자인 메서드이며 매개변수를 필요로 하는 메서드는 Start()메서드에 인자를 넣어 호출하면 된다. 대리자의 매개변수의 타입은 object로 한다(안그러면 에러남) 대리자의 매개변수가 없는 경우 이때는 인자 없이 St..

개발언어/C# 2024.04.18

[C#] Class vs Struct

정의 class 객체 지향 언어에서 사용되는 중요한 형식으로, 객체를 만드는 틀 역할을 한다. 생성자, 멤버변수, 메서드로 이루어져 있다. 상속을 통해 클래스를 확장할 수 있다. struct 여러 타입의 변수를 저장하고 이를 하나의 타입으로써 사용할 수 있는 사용자 정의 타입 클래스와 마찬가지로 생성자, 멤버변수, 메서드를 가질 수 있다. 차이점 1) 형식 차이 class는 참조 형식인 반면 struct는 값 형식이다. *참조형식: 힙(Heap)에 값이 저장되어 프로그램이 종료될 때까지 메모리에 남아있다. 힙(Heap)에 저장되어 있는 값의 주소가 스택(Stack)에 저장되어 있다. 힙(Heap)에 메모리를 할당하기 위해서는 new 연산자가 필요하다. *값형식: 스택(Stack)에 값이 저장되어 해당 메..

개발언어/C# 2024.04.12