반응형 전체 글454 C# 스레드 제어 Thread.Sleep(0), Thread.Sleep(1), Thread.Yield()의 차이점 C# 스레드 제어 Thread.Sleep(0), Thread.Sleep(1), Thread.Yield()의 차이점 Thread.Sleep(0)Thread.Sleep(0) 메서드는 현재 스레드가 남은 시간을 포기하고, 동일한 우선순위의 다른 스레드가 실행될 수 있도록 합니다. 이 메서드는 현재 스레드의 실행을 즉시 중단하고, 운영 체제의 스레드 스케줄러가 다른 준비된 스레드에 실행 기회를 부여하도록 합니다. 만약 동일한 우선순위의 다른 스레드가 없다면, 현재 스레드는 즉시 다시 실행됩니다.Thread.Sleep(1)Thread.Sleep(1) 메서드는 현재 스레드를 1밀리초 동안 일시 중지시킵니다. 이 메서드는 최소 1밀리초 동안 스레드를 중단시키고, 그 후에 스레드가 실행될 수 있도록 합니다. 이는 실제.. 2024. 7. 1. C# SpinLock 효율적인 스레드 동기화 기법 C# SpinLock 효율적인 스레드 동기화 기법C#의 SpinLock에 대해 알아보겠습니다. SpinLock은 멀티스레드 환경에서 가벼운 락을 제공하여 효율적인 동기화를 가능하게 합니다. 주로 짧은 기간 동안 자원을 보호할 때 사용되며, 이 포스트에서는 SpinLock의 개념, 사용 방법, 그리고 주의사항에 대해 설명하겠습니다.SpinLock이란 무엇인가?SpinLock은 C#에서 제공하는 락의 한 종류로, 자원을 보호하기 위해 사용됩니다. 일반적인 락과의 차이점은 SpinLock이 자원을 기다리는 동안 스레드를 차단하지 않고, 계속해서 루프를 돌면서 자원이 해제되기를 기다린다는 것입니다. 이렇게 하면 짧은 시간 동안 자원을 보호할 때 성능을 향상시킬 수 있습니다.SpinLock의 동작 원리일반적인 락.. 2024. 7. 1. C# 멀티스레딩에서 데드락 문제와 해결 방법 C# 멀티스레딩에서 데드락 문제와 해결 방법예제 코드 분석아래 예제 코드는 두 개의 클래스 LockTestA와 LockTestB를 사용하여 각각 서로의 메서드를 호출합니다. 이 과정에서 데드락이 발생할 수 있습니다.class LockTestA{ static object _lock = new object(); public static void TestTaskA() { lock (_lock) { LockTestB.TestTaskB(); } } public static void TestTaskB() { lock (_lock) { } }}class LockTestB{ stat.. 2024. 7. 1. C# 멀티스레딩에서 안전한 공유 자원 관리를 위한 임계영역과 Lock 사용법 C# 멀티스레딩에서 안전한 공유 자원 관리를 위한 임계영역과 Lock 사용법예제 코드 소개아래의 예제 코드는 두 개의 스레드가 number 변수를 각각 증가 및 감소시키는 방식으로 동작합니다. 그러나 동시 접근으로 인해 number 값이 예상과 다르게 나올 수 있습니다.class Program{ static int number = 0; static void Thread_1() { for (int i = 0; i 1. 임계영역 (Critical Section)임계영역은 동시에 접근해서는 안 되는 공유 자원에 접근하는 코드 영역입니다. 임계영역은 한 번에 하나의 스레드만 접근할 수 있도록 해야 합니다. 위 예제에서 number 변수에 대한 접근이 임계영역에 해당합니다.2. 상호배.. 2024. 7. 1. C# 멀티스레딩에서 경합 조건과 Interlocked 클래스의 사용 C# 멀티스레딩에서 경합 조건과 Interlocked 클래스의 사용예제 코드 소개아래의 예제 코드는 두 개의 스레드가 number 변수를 각각 증가 및 감소시키는 방식으로 동작합니다. 하지만, 실행 결과는 예상과 다르게 0이 아닌 다른 값이 출력될 수 있습니다.class Program{ // 경합 조건 static int number = 0; static void Thread_1() { for (int i = 0; i 경합 조건이란?경합 조건(race condition)이란 여러 스레드가 동시에 공유 자원에 접근할 때 발생할 수 있는 문제입니다. 각 스레드가 자원을 읽고 쓸 때의 순서에 따라 프로그램의 실행 결과가 달라질 수 있습니다.예제 코드의 문제위 코드에서 두 스레.. 2024. 7. 1. 멀티스레딩에서 발생하는 메모리 재정렬 현상과 해결 방법 멀티스레딩에서 발생하는 메모리 재정렬 현상과 해결 방법예제 코드 소개아래의 예제 코드는 두 개의 스레드가 각각 x와 y 변수를 설정하고, 다른 변수인 r1과 r2에 값을 할당하는 방식으로 동작합니다. 코드를 여러 번 실행해 보면, r1과 r2 값이 동시에 0이 되는 경우가 발생할 수 있습니다.class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread_1() { y = 1; r1 = x; } static void Thread_2(.. 2024. 7. 1. C# 다차원 배열 순회 행 우선 순회와 열 우선 순회의 성능 차이 C# 다차원 배열 순회 행 우선 순회와 열 우선 순회의 성능 차이예제 코드 소개먼저, 예제 코드를 살펴보겠습니다. 이 코드는 10,000 x 10,000 크기의 2차원 배열을 두 가지 순서로 설정하면서 걸리는 시간을 측정합니다.class Program { static void Main(string[] args) { int[,] arr = new int[10000, 10000]; { long now = DateTime.Now.Ticks; for (int y = 0; y 결과 분석위 코드를 실행하면 (y, x) 순서로 배열을 설정하는 것이 (x, y) 순서로 설정하는 것보다 더 빠르게 .. 2024. 7. 1. Visual Studio 닷넷 global using 자동 추가되는 기능 끄기 Visual Studio 닷넷 global using 자동 추가되는 기능 끄기 프로젝트를 만들고 작업을 하다보니 using이 자동으로 추가되는 모습을 보았다.이것이 편리하긴 하지만 학습자의 입장에서 자동으로 추가되는 것은 볼 수 없다. 해당 파일은 솔루션 탐색기에서 모든 파일 보기를 설정하면 GlobalUsings.g.cs를 찾을 수 있다. 이 기능을 끄는 방법은 프로젝트 파일을 더블 클릭하여 설정 파일을 열어 ImplicitUsings 기능을 disable로 만들어준다. 사라진다. 2024. 7. 1. C# 스레드 동기화 문제 해결하기 디버그 모드와 릴리즈 모드에서의 차이점 C# 스레드 동기화 문제 해결하기 디버그 모드와 릴리즈 모드에서의 차이점문제 설명다음은 문제의 예제 코드입니다. 디버그 모드에서는 정상적으로 종료되지만, 릴리즈 모드에서는 스레드가 종료되지 않는 문제가 발생합니다.class Program { static bool _stop = false; static void ThreadMain() { Console.WriteLine("쓰레드 시작!"); while (_stop == false) { // 누군가가 stop 해주기를 기다린다. } Console.WriteLine("쓰레드 종료!"); .. 2024. 7. 1. 리눅스 CentOS 아파치 보안 설정 리눅스 CentOS 아파치 보안 설정 Linux CentOS Apache 보안 설정 불필요한 파일 삭제아파치 설치 시 기본적으로 설치되는 cgi-bin은 공격에 이용될 수 있으므로 삭제매뉴얼 파일은 시스템에 대한 정보를 제공할 수 있어서 공격에 도움이 될 수 있으므로 삭제 /var/www에 있는 쓰지 않는 폴더 제거> rmdir /var/www/cgi-bin/var/www/manual 및 /var/www/cgi_bin 삭제 웹 서비스 영역의 분리apache 설치 시 DocumentRoot 폴더가 기본적으로 설정되어 있다.Apache 설치 시 htdocs 디렉터리를 DocumentRoot로 사용하고 있는데 htdocs 디렉터리는 공개되어서는 안 될(또는, 공개될 필요가 없는) Apache 문서뿐만 아니라 .. 2024. 6. 30. CentOS에서 비정상적인 로그인 시도 추적과 접근 제한 방법 CentOS에서 비정상적인 로그인 시도 추적과 접근 제한 방법서버 보안은 모든 시스템 관리자에게 가장 중요한 과제 중 하나입니다. 특히 SSH를 통해 무차별 대입 공격(Brute Force Attack) 등의 비정상적인 로그인 시도를 방어하는 것은 필수적입니다. 이 블로그 포스트에서는 CentOS에서 비정상적인 로그인 시도를 추적하고 접근을 제한하는 방법에 대해 다룹니다.1. 비정상적인 로그인 시도 추적비정상적인 로그인 시도를 추적하기 위해서는 시스템 로그를 확인해야 합니다. CentOS에서는 /var/log/btmp 파일에 실패한 로그인 시도가 기록됩니다.실패한 로그인 시도 확인last 명령어를 사용하여 실패한 로그인 시도를 확인할 수 있습니다.last -f /var/log/btmp이 명령어는 다음과 .. 2024. 6. 28. CentOS SSH root 계정 접속 막기 linux 보안 CentOS SSH root 계정 접속 막기 linux 보안 SSH로 root 계정 접속을 막는 것은 보안을 강화하는 좋은 방법입니다. 그러나 root 계정으로 직접 로그인할 수 없게 하면 다른 방법으로 root 권한을 얻을 수 있는 메커니즘이 필요합니다. 주로 일반 사용자 계정을 통해 로그인한 후 sudo 명령을 사용하여 필요한 작업을 수행할 수 있습니다. 아래는 이 과정에 대한 자세한 설명입니다.1. 일반 사용자 계정 생성먼저 일반 사용자 계정을 생성합니다. 이미 계정이 있는 경우 이 단계를 생략할 수 있습니다.sudo adduser newuser위 명령에서 newuser는 새 계정의 이름입니다. 다음으로 새 사용자에게 비밀번호를 설정합니다.sudo passwd newuser2. sudo 권한 부여생.. 2024. 6. 28. 이전 1 ··· 4 5 6 7 8 9 10 ··· 38 다음 반응형