쓰레드 동기화, thread safe

Zio0708·2021년 3월 12일
0

StringBuffer와 StringBuilder. 에서..

StringBuffer에는 쓰레드 동기화가 있어 멀티쓰레드에서 안전하다.

쓰레드 동기화는 뭘까?

멀티쓰레드를 사용할때, 여러개의 쓰레드가 같은 프로세스의 자원을 공유하기 때문에 작업에 심각한 영향을 줄 수 있다.

나의 경우에는 은행의 출금과 송금이 동시에 일어나는 경우로 비유를 들었는데, 출금과 동시에 송금이 되면 출금되어야 하는 돈이 송금 되어 버릴 수 있다는 예시를 들었었던 것 같다.

쓰레드의 동기화를 위해서는 critical section과 lock을 사용한다.

Syncronized키워드로 임계영역(critical section)을 정해 그 영역 안에서는 중복된 접근을 막는다.

쓰레드의 동기화에서는 wait()과 notify()을 사용하는데,
wait()은 lock을 가진 스레드가 lock을 반납하고 대기를,
notify()는 대기 스레드에게 lock을 주고 수행하게 한다.
이 둘은 임계영역 내에서 수행된다.

쓰레드와 프로세스

겸사겸사 멀티쓰레드가 뭐고 프로세스가 뭔지도 이해하자.

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 지칭한다.
작업 관리자에서 많이 보는 것이라 이해하기 쉬운 것 같다.

쓰레드는 이런 프로세스 내에서 실행되는 흐름의 단위를 말한다.
멀티 프로세스는 각각 독립적으로 실행되고 별개의 메모리를 가지는데(작업 관리자의 프로세스 목록을 보면 된다.) 멀티 쓰레드의 경우 프로세스 내의 메모리를 공유하여 사용한다.

Thread-safe하다는 것은

결국 멀티 쓰레드에서 굴려도 문제 없이 돌아간다는 뜻이다.
쓰레드 동기화의 개념을 이해하고 동기화가 쓰이는 StringBuffer를 사용해서 멀티쓰레드 환경에서도 Thread-safe를 해보자.

0개의 댓글