# RaceCondition

5개의 포스트

[CS] 경쟁조건(Race Condition)

경쟁조건 경쟁조건, 경합조건이라 불리는 RaceCondition은 멀티 쓰레드 환경에서 공유 자원에 동시에 접근하고 수정하려 할 때 쓰레드의 실행순서나 타이밍에 따라 결과가 달라지는 상황을 얘기한다. 아래 C#코드를 보면 공유 자원(numer)에 접근하고 수정하는 2개의 쓰레드(Thread1, Thread2)가 있다. Thread1은 number를 1증가시키는 연산을, Thread2는 number를 1감소시키는 연산을 각각 10만번씩 한다. 위 코드의 결과를 예상하자면 당연히 0일 것이다. 메인쓰레드에서 t1,t2를 실행시키고 각 loop에 t1,t2를 대기하고 10만번의 증가와 10만번의 감소로 인해 0이 되기 때문이다. > 하지만, 각 loop의 결과 값은 0이 아닐 것이다. 1. 왜 0이 아닐까? 이유부터 말하자면 실제 연산되는 순서는 한줄이 아닌 여러줄에 걸쳐서 연산이 이뤄지기 때문이다. number++로 예를 들면, 한줄의

2023년 7월 26일
·
0개의 댓글
·
post-thumbnail

여러 스레드가 동일한 자원을 공유할 때 발생할 수 있는 ‘동시성 이슈’를 해결하는 여러가지 방법

들어가며 동시에 같은 DB Table row 를 업데이트 하는 상황을 방어하는 것, 선착순 문제 등과 같은 동시성 이슈와 관련된 고민을 하다가 인프런에 올라온 재고시스템으로 알아보는 동시성이슈 해결방법을 완강하였다. 이를 복습하는 차원에서 직접 재고 시스템을 구현해보며 정리해보았다.   동시성(Concurrency)이란? 동시성의 사전적 의미는 빠르게 전환하며 여러 작업을 수행하여 동시에 여러 작업이 실행되는 것처럼 보이는 것을 의미한다. 하지만 구체적으로 DB에서의 동시성은 조금 다르게 해석할 수 있다. 동시성은 여러 요청이 동시에 동일한 자원(data)에 접근하고 수정하려는 것을 의미한다. > 선착순

2023년 1월 13일
·
0개의 댓글
·

운영체제의 동시성 문제

우선, 동기와 비동기가 무엇일까? 동기는 요청에 의한 응답이 올때까지 기다리며 비동기는 요청을 보내고 다른 작업을 하다가 응답을 받을 수 있다. 동기와 비동기는 이러한 차이가 있다. 동시성 문제 >동시성 문제란, 두 개 의상의 세션이 공통된 자언에 대해 모두 읽고 쓰는 작업 (Read → Write)를 할 때 발생하는 문제를 뜻한다. Critical Section 임계구역이라 하는 Critical Section은 한 번에 하나의 프로세스만 액세스 할 수 있는코드 영역을 의미한다. 프로세스는 일반적으로 4가지의 코드 영역으로 나뉜다. Entry Section Critical Section에 진입하기 위해 진입허가 요청을 하는 영역이다. Critical Section에 진입하는것을 제어한다 하는데 이를 Lock한다고 한다. Ciritical Section 하나의 프로세스 만 접근할 수 있는 영역이다. Exi

2022년 4월 4일
·
0개의 댓글
·
post-thumbnail

Concurrency Problem[1](feat. thread, process) - 컴퓨터가 바라보는 상태란?

수정중! > 1. 시리즈로 만들고 있는 이 글의 주제와 관련하여 Race Condition은 부분적인 것을 나타내어 Concurrency Problem(동시성 문제)로 제목 수정 Introduction  지난 포스팅에서 상태를 가지므로써 Side Effect가 생길 수 있고 그에 따라 Race Condition이 발생하는 부분을 살펴보았다. 이번 포스팅에서는 컴퓨터가 우리가 말하는 "상태"를 어떻게 다루길래 이런 문제가 생기는가에 대해서 컴퓨터 구조와 OS 관점에서 살펴보려고 한다. CPU always work!  게임하는 도중에 CPU가 지금 어떤 연산을 하고 있는지, 크롬으로 쇼핑몰에 들어가 쇼핑을 할 때 CPU가 어떤 일을 수행하고 있는지 모르는 것처럼 우리가 평상시 컴퓨터를 사용할 때에는 CPU가 무엇을 하는지 1도 관심이 없다. 하지만 반대로 CPU는 우리(User Program)가 무엇을 하는지 관심이 많다(처리를 해준다). ![](ht

2022년 3월 7일
·
0개의 댓글
·
post-thumbnail

Concurrency Problem[0](feat. side effect) - 상태를 가진다는 것

Introduction 동시성 문제를 말하면 항상 나오는 레이스 컨디션을 무엇인지는 설명할 수 있어도 왜 생기는지 본질적인 이유를 알지 못하는 것 같아 왜 생기는지를 컴퓨터 구조부터 언어 측면까지 정리해보려고 한다. 이번 글에서는 특히 상태를 갖는다는 것이 Race Condition에 어떤 영향을 주는지까지 정리하려 한다. Concurrency bug(동시성 문제) 동시성 문제란 우리가 동시성을 사용함으로써 발생하는 문제들을 말한다. 그럼 여기서 동시성이란 프로그램이나 알고리즘의 단위가 순서에 관계없이 혹은 부분적으로 실행되는 능력을 말한다. 자세히 설명하면 concurrent unit이라고 말하는 단위의 병렬 실행을 허용하여 multi-processor, multi-core 시스템의 성능을 향상시켜

2022년 3월 7일
·
0개의 댓글
·