본문 바로가기

thread

(2)
Threads 여기서는 몇 가지 기억에 남는 것들만 정리함. 먼저 대기하는 스레드가 조건을 검사할 때 if문 대신 while문을 사용하는데 이게 일반적으로 간단하고 안전하다. 예를 들어 pthread 라이브러리에서 변수를 제대로 갱신하지 않고 대기하던 스레드를 깨울 수 있다. 이런 경우 재검사를 하지 않는다면 대기하던 스레드는 조건이 변경되지 않더라도 변경되었다고 생각함. 때문에 컨디션 변수에서 시그널 도착은 변경 사실을 알리는 것이 아니라, 변경된 것 같으니 검사해 보라는 힌트 정도로 보는 것이 더 안전하다. 또한 컨디션 변수 사용하지 않고 간단하게 플래그 형식으로만 구현하면 굉장히 위험하다. 코드의 성능이 일단 좋지 않고, 오류 발생하기가 쉽다. lock 여러개의 명령어들을 원자적으로 실행해보고 싶지만 단일 프로세..
동시성 이슈 동기화는 근본적으로 어려운 문제라고 한다. 어떤 종류의 동시성 흐름이 공유 자원을 조작할 때 발생하는 일반적인 이슈들을 정리해 보자. 스레드 안전 (Thread safety) 쓰레드로 프로그래밍할 때, 스레드 안전성이라고 부르는 특성을 가지는 함수를 작성하도록 유의해야 함. 다수의 동시성 스레드로부터 반복적으로 호출될 때 항상 정확한 결과를 만드는 경우에만 스레드-안전이라고 한다. 병렬 프로그램에서는 단순히 lock만 신경 쓴다고 해결되지 않는 다고 한다. 만일 어떠한 함수가 스레드 안전하지 않다면 이것은 thread-unsafe라 한다. 스레드-위험한 함수의 네 가지 클래스를 다음과 같이 식별할 수 있다. 클래스 1: 공유 변수를 보호하지 않는 함수들 예를 들어 보호되지 않는 전역 변수를 증가시키는 경..