본문 바로가기
반응형

분류 전체보기505

운영체제 - SpinLock(스핀락) - Test-and-Set, Compare-and-Swap SpinLock(스핀락) 동기화 기법 중 하나로 여러 쓰레드가 공유자원에 접근한느 것을 제어하기 위해 사용된다. race condition을 해결하고 mutal exclusion을 구현하기 위해 이용된다. 스핀락 구현 class SpinLock { // true이면 누가 화장실 사용중, false이면 빈 화장실 // volatile 가시성을 보장 volatile bool _locked = false; // 열쇠 획득 함수 public void Acquire() { // 잠금이 풀릴때까지 계속 뺑뺑 돈다 while(_locked) { // 잠금이 풀릴때까지 기다린다 } // 이제 내가 들어간다 _locked = true; } // 열쇠 반납 함수 public void Release() { // 나 나간다 .. 2023. 5. 22.
운영체제 - C# Lock구현 연습 화장실에 이미 사람이 있다면 대기할 수 있는 방법을 알아보자 01 무작정 기다리기 화장실안에 사람이 있으면 계속해서 대기하는 방식이다. 단점 - 안에 있는 사람이 안나온다면 계속 시간이 허비된다. 02 일단 자리로 왔다가 다시 랜덤 시간 후 다시 가본다. 단점 - 랜덤성이 강해서 자리로 돌아오자 사람이 나오는 경우도 있고 다른 누군가가 기다리는 경우가 생기면 더 오래걸릴 수도 있다. 03 직원한테 화장실이 비면 알려주세요 라고 부탁한다. 장점 : 기다리는 시간이 없다. 단점 : 직원을 거쳐 한 단계를 건너야 한다. 만약에 대기자가 많았을 경우 직원한테 락을 구현할때 누군가가 이미 차지하고 있으면 어떻게 해야할까? 01 무작정 기다린다.(스핀락) 쓰레드가 계속 반복하여 확인하는 방식으로 동작한다. 단점 :.. 2023. 5. 22.
운영체제 - DeadLock(데드락) 데드락 자물쇠를 2개다 획득해야만 화장실에 들어갈 수 있다고 가정.해보자. 두 사람이 있다면 각각 사람이 1개씩 자물쇠를 가지고 그 다음 자물쇠를 가질려고 할 때 이미 한 개씩은 가지고 있으므로 모두 자물쇠를 하나씩 더 획득하는 것이 불가능하게 된다. 이와 같은 상황이 발생하는 이유는 자물쇠를 잠그는 순서가 안맞기 때문이다. A사람은 1번자물쇠를 먼저 잠그고 B사람은 2번 자물쇠를 먼저 잠그기 때문에 서로 사이클이 일어나는 문제가 발생한다. 왜 화장실은 한개인데 자물쇠를 2개 사용하는 상황이 일어날까? 코드상으로 확인 class SessionManager { static object _lock = new object(); public static void TestSession() { lock (_lock.. 2023. 5. 22.
Unity - randomColor 만드는 법 및 HSV, RGBA 설명 1. randomColor.HSV HSV는 Hue(색조), Saturation(채도), Value(명도)로 구성되어 있다. public static Color ColorHSV(); public static Color ColorHSV(float hueMin, float hueMax); public static Color ColorHSV(float hueMin, float hueMax, float saturationMin, float saturationMax); public static Color ColorHSV(float hueMin, float hueMax, float saturationMin, float saturationMax, float valueMin, float valueMax) 매개 변수 hu.. 2023. 5. 22.
Unity - 부모 오브젝트 할당하기(Object Instantiate()) Instantiate()을 사용해서 부모 오브젝트 할당하기 public static Object Instantiate(Object original, Transform parent); 매개변수 original : 복제할 오브젝트 parent : 새로운 오브젝트를 배치할 부모 오브젝트의 trasnform Code 예시 Parent 밑에 랜덤으로 된 색깔의 큐브 child 10개 할달하기 public class Parent : MonoBehaviour { public GameObject child; public Transform parent; void Start() { for (int i = 0; i < 10; i++) { Instantiate(child, parent); } } } 결과 2023. 5. 22.
Unity - 옵저버 패턴(Observer Pattern) Observer Pattern이란?1 : N 종속 관계를 구현하는데 사용되는 패턴이다. 한 객체의 상태 변경이 다른 여러 객체에게 알려지고 자동으로 업데이트 될때 사용된다. 예를 들어 유뷰트 채널은 발행자(Subject)이 되는거고 구독자들은 관찰자(Observer)가 되는구조로 보면 된다. 유튜버가 영상을 올리면 여러 명의 구독자들은 모두 영상의 알림이 간다. 하지만 구독을 취소한 경우에는 알림이 가지 않는다. 왜 필요할까?서로의 정보를 주고 받는 객체들의 규모가 클수록 복잡성이 증가하게 되는데 이때 가이드라인을 제시해줄 수 있는 것이 옵저버패턴이다. 예를 들어 마음에 드는 집 매물이 나왔는지 확인하고 싶다고 가정해보자01 옵저버 패턴을 사용하지 않는 경우입주 희망자는 그러면 공인 중개사에 집 매물이 .. 2023. 5. 21.
반응형