로딩
요청 처리 중입니다...

(python) 세마포어와 뮤텍스

 (python) 세마포어와 뮤텍스

세마포어와 뮤텍스 비동기(Asynchronous) 환경에서는 여러 작업이 동시에 실행되는 것 처럼, 또는 실제로 동시에 실행되도록 사용자에게 보여진다. 이때 개발자가 겪게 되는 가장 큰 문제는 공유 자원(shared resource)에 대한 경쟁 상태(Race Condition)이 발생하게 되는 경우다.

세마포어, 뮤텍스는 이 문제를 해결하기 위해 존재하는 로직이다. 동기화가 필요한 이유 여러 비동기 작업이 같은 변수, 파일, 데이터베이스, 네트워크 소켓 등에 접근할 경우 실행 순서를 정해주지 않으면 아래의 문제가 발생된다.

데이터 손상 중복 처리 앱 크래시 등등 count = 0 async def increase(): global count temp = count await asyncio.sleep(0.1) count = temp + 1 위 예시에서, 사용자가 많아져 동시에 여러 increase()가 실행되면 count 값이 기대한 결과보다 작아지는 경우가 발생하게 된다. 이것을 ...