본문 바로가기
728x90

분류 전체보기255

[쓰레드 동기화] Thread [Sleep, Yield] , ContextSwitching 랜덤(Random) 접근 스레드가 while 루프내에서 스핀 락 처럼 무한정 대기하며 불필요한 작업을 하는 것이아닌 랜덤적으로 접근하여 해장 잠금(locked)을 사용하는 방법이다. 여기서 랜덤적으로 접근이란, 한 가지 예시적 상황을 보자. 처음 들어온 스레드가 임계구역에 들어가서 어떤 변수를 사용중인 상황에 두번째 스레드가 임계구역에 들어 가려고 잠금을 획득하려는 찰나 누군가 사용하고 있다. 스핀 락의 경우 폴링방식으로 무한정 대기하지만, 이 랜덤 접근의 상황에서는 두번째 스레드가 "아 누군가 쓰고있네 잠시 있다 와야지 난 좀 이따가 올게 "의 방법이다. 이 방법을 사용하면 불필요한 연산이나 작업을 줄여 CPU의 점유율을 낮출 수 있지만, 반대로, "잠시 있다 와야지" 라는 상황이 무한정 발생한다면, .. 2020. 7. 21.
[쓰레드 동기화]스핀 락(Spin Lock) 구현 스핀 락 스핀락은 폴링 방식의 동기화 처리를 하는 방식이다. 마이크로 프로세서 에서 내부 인터럽트를 사용하지 않고 값의 state 가 바뀌는지 while(1) 을 이용하여 확인 하는것과 같다. 한 가지 예를 보자 num 이라는 데이터를 첫번째 스레드에선 +1 씩 계속 증가시키고 두번째 스레드에선 -1 씩 계속 감소시키는 행위를 각각 10만번 씩 하면 직관적으로는 당연히 프로그램이 뻗지 않는이상 당연히 0이 나올 것이다. 하지만 이전 포스팅에서 자원 접근에 대한 동기화가 이루어 지지 않으면 한 쪽에서 값을 변경 시켜도 다른 쪽에선 이전에 가지고 있던값을 최신이라고 저장하고 있다가 값을 변경시키는 현상이 발생하므로 의도했던 데이터 갱신이 이루어지지 않는다. 이를 해결하기 위해 첫번째 폴링 방식의 스핀락을 구.. 2020. 7. 20.
17136 색종이 붙이기 https://www.acmicpc.net/problem/17136 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크�� www.acmicpc.net 문제 풀이의 접근은 다음과 같이 진행하였다. 각 색종이의 size(1~5)를 5장씩 사용해보며 종이의 1의 갯수가 모두 사라지면 다 붙였다고 판단하고 그때 붙인 색종이의 갯수가 최소값을 구하여 출력하였다. 먼저 문제의 조건에서 1. 종이가 0인 부분이 붙이면 안된다. 2. 덮어쓰기가 불가능하다. 3. 붙이려는 색종이가 10x10의 종이 사이즈를 초과하면 안된다. 조건 1을 검사하기 위.. 2020. 7. 19.
[쓰레드 동기화] Monitor 와 lock (IPC) (lock > Monitor 편의성) https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.monitor?view=netcore-3.1 Monitor Class (System.Threading) 개체에 대한 액세스를 동기화하는 메커니즘을 제공합니다.Provides a mechanism that synchronizes access to objects. docs.microsoft.com Monitor Interlock과 같이 공유 자원 선점의 동기화를 위해 사용된다. Interlock의 경우 특정 쓰레드 동기화가 필요한 코드 블럭 { 임 계 구 역 } 을 동기화 할때 쓰기보다는 특정 변수의 Increment 와 Decrement를 할 때 많이 쓰인다. 코드 블럭단위의 임계구역의 진입을 제어.. 2020. 7. 18.
[쓰레드 동기화] Interlocked (공유자원과 임계구역) https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.interlocked?view=netcore-3.1 Interlocked Class (System.Threading) 다중 스레드에서 공유하는 변수에 대한 원자 단위 연산을 제공합니다.Provides atomic operations for variables that are shared by multiple threads. docs.microsoft.com Remarks 이 클래스의 메서드는 스레드는 다른 스레드에서 액세스할 수 있는 변수를 업데이트 하는 동안 스케줄러 컨텍스트를 전환 하는 경우 또는 별도 프로세스에서 두 스레드가 동시에 실행 중일 때 발생할 수 있는 오류 로부터 보호할 수 있습니다.. 2020. 7. 18.
[쓰레드] TaskCreateOptions.LongRunning 테스크를 만들때 옵션에 LongRunning을 해줄 수 있는데 이것은 긴 작업이 소요될 가능성이 있는 테스크를 지정하여 쓰레드풀에서 따로 관리되게 만들어줌. 아래처럼 쓰레드 풀이 제한이 3개 이지만 실제 쓰레드 함수가 실행되는 것을 볼 수 있음. LongRunning 옵션을 취하여 Thread를 선언하여 사용할때 보다 Task를 사용하여 관리 유연성이 좋아졌다는 것을 알 수 있다. 2020. 7. 17.
[쓰레드] 쓰레드풀(ThreadPool) 쓰레드 풀 (ThreadPool) - 쓰레드 임시 대기소같은 개념이다. 관리 되어야하는 작업들이 끝나면 해당 쓰레드를 삭제하지 않고 쓰레드풀에서 임시 대기 시켰다가 다시 필요하면 사용할 수 있다. public static bool QueueUserWorkItem(WaitCallback callBack); - > WaitCallback callBack 함수를 메서드 큐에 대기시킨다. 위에선 ThreadFunc 함수를 대기 시킴, 대기 큐에 성공적으로 들어가지면 true 작업항목을 큐에 대기시키지 못하면 System.NotSupportedException이 발생. 델리게이트로 ThreadFunc의 함수포인터를 전달 시키는데 매개변수 타입이 없으면 에러가나서 사용할 매개변수가 없으면 형태만 맞춰주자. 위에서 .. 2020. 7. 17.
[쓰레드] IsBackground , join Thread IsBackground; public bool IsBackground { get; set; } 스레드가 배경 스레드인지를 나타내는 값을 가져오거나 설정합니다. 반환 값: 이 스레드가 백그라운드 스레드이거나 백그라운드 스레드가 될 예정이면 true이고, 그렇지 않으면 false입니다. 예외: T:System.Threading.ThreadStateException: 스레드가 중지되었습니다. 해당 쓰레드를 백그라운드로 돌릴것이냐 포그라운드로 돌릴것이냐 설정 할 수 있다. 디폴트(default)는 false 값을 가지고있다. true 설정을 하면 백그라운드 쓰레드로 설정하겠다는 뜻이고. 메인 쓰레드가 종료되면 백그라운드 쓰레드가 작업하던 I'm Thread 출력을 상관없이 종료 시킨다. 반대로 fa.. 2020. 7. 17.
2234 성곽 https://www.acmicpc.net/problem/2234 2234번: 성곽 문제 대략 위의 그림과 같이 생긴 성곽이 있다. 굵은 선은 벽을 나타내고, 점선은 벽이 없어서 지나다닐 수 있는 통로를 나타낸다. 이러한 형태의 성의 지도를 입력받아서 다음을 계산하는 프로� www.acmicpc.net (풀이) 1. 성의 방의 갯수는 연결요소가 몇개인지 탐색을 해서 구한다 2. 방의 최대길이는 각 연결요소의 길이중 최대합을 구한다. 3. 하나의 벽을 제거하여 얻을 수 있는 방의 최대 크기는 서로 이웃한 다른 연결요소들의 길이를 합하여 그 중 최대값이 무엇인지 구한다 EX) 서로 이웃한 방(1->5), (1->2), (2->3), (2->5) (3->4) 1과 이웃한 방이 5라면 한번 벽을 허물고 길이를 .. 2020. 7. 17.
17822 원판 돌리기 https://www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net (풀이) 1. rotate 함수 구현 CCW, CW 방향을 매개변수로 받아서 각각 x배수 번째의 원판을 K번 회전 시킨다. CCW인 경우 (d ==1) -> 배열을 왼쪽으로 k번 회전 시켜주면 된다. CW인 경우는 오른쪽으로 k 번 회전 2.조금 변형된 BFS 인접한 4방향탐색을 통해 원판과 인접한 숫자들이 같으면 소거한다. 하지만, 예를들어 1431 이 한개의 원판에 있을때 원판.. 2020. 7. 15.
728x90