[OS] Thread Safe란?

2015. 11. 21. 15:36·Development/OS
반응형

Thead Safe


스레드 안전(thread 安全, 영어: thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.

 



Deadlock의 예시




Thread-safe를 지키기 위한 방법


1. Re-entrancy

어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바로 주어져야 한다.


2. Thread-local storage

공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다.

이 방식은 동기화 방법과 관련되어 있고, 또한 공유상태를 피할 수 없을 때 사용하는 방식이다.

 

3. Mutual exclusion

공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락으로 통제한다.


4. Atomic operations

공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현할 수 있다.

 

1) MUTEX를 이용한 동기화 방법

pthread_mutex_lock(&mutx);

... Critical Section

pthread_mutex_unlock(&mutx);

 

2) SEMAPHORES를 이용한 동기화 방법

 

A Thread

state = sem_init(&bin_sem,0,0);

while(number != 0)

wait...

데이터 처리

sem_post(&bin_sem);

 

B Thread

sem_wait(&bin_sem);

데이터 처리


통상적으로 Mutual Exclusion(상호배제) 방식을 이용한 Critical Section 처리가 자주 사용되는 편이다.


상호배제란, 한 Thread가 자원에 접근할 때 다른 Thread의 접근을 막는 것을 의미한다.

반응형
저작자표시 비영리 (새창열림)

'Development > OS' 카테고리의 다른 글

[linux] 오래된 log 파일 찾아서 지우기  (0) 2017.11.09
[Linux] 리눅스 ssh 프롬프트 폰트 coloring 적용  (2) 2017.07.23
[Linux] sudo 로그인 시 패스워드 입력 없이 권한얻기  (0) 2017.07.23
[Linux] 자바 웹 어플리케이션 서버 실행 쉘(Shell) 스크립트  (1) 2017.05.31
[C] 컴파일러 메모리 배치표  (0) 2015.11.21
'Development/OS' 카테고리의 다른 글
  • [Linux] 리눅스 ssh 프롬프트 폰트 coloring 적용
  • [Linux] sudo 로그인 시 패스워드 입력 없이 권한얻기
  • [Linux] 자바 웹 어플리케이션 서버 실행 쉘(Shell) 스크립트
  • [C] 컴파일러 메모리 배치표
@곰팡
@곰팡
Java Backend Developer
  • @곰팡
    곰팡이 먼지연구소
    @곰팡
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • Daily Life (1)
        • 잡담 (1)
      • IT기업 입사 (0)
      • Development (52)
        • Java (24)
        • Spring (6)
        • Web (3)
        • OS (6)
        • Algorithm (4)
        • 이것저것 끄적끄적 (3)
        • Netty & FlatBuffers (3)
        • Database (2)
        • Dev-ops, Monitoring (1)
      • Labatory (0)
        • Test Bed 1 (0)
  • 블로그 메뉴

    • 메인
    • 카테고리
    • 태그
    • 방명록
    • 글 작성
    • 관리자
  • 링크

    • linkedIn
    • github
  • 공지사항

  • 인기 글

  • 태그

    고쿠라
    자바
    북큐슈
    kitakyusu
    일본
    Spring
    springboot
    HashMap
    타코야끼
    일본여행
    linux
    Spring Boot
    皿倉山
    해외여행
    北九州
    java
    flatbuffer
    고쿠라역
    기타큐슈
    prometheus
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
@곰팡
[OS] Thread Safe란?
상단으로

티스토리툴바