리눅스 - 세마포어의 프로세스 간 통신

기본 개념 소개

여러 스레드가 공유 데이터를 액세스, 부정적인 결과를 일으킬 수, 리소스에 대한 무결성과 데이터 액세스의 보안을 보장하려면, 스레드에 대한 필요 "동기화"
모든 엔티티 (리눅스 구현은,)와 같은 작업 (작업이라 여러 작업이 메모리 공간은 프로세스를 구성하는 공유와 각 작업), 단일 스레드 프로세스와 유사
 

  • 동기화
    , 다른 스레드가 동일한 데이터에 액세스 할 수있는 데이터에 대한 스레드 액세스가 완료되지 않은 시간을 의미, 액세스 데이터 의지 분무
     
  • 원자 작업
    불가분의, 그것은 중단 스레드 스케줄링 운영되지 않습니다
    프로세스 (프로그램 실행이 더 높은 우선 순위 스레드 인터럽트 될 수도 있지만 일부 작업은 다른 결과가이 시간에 복원되지 않습니다, 중단되지 않습니다 OS)는 원 동작이 필요

스레드 동기화

먼저 잠금 및 잠금을 취득해야합니다 데이터에 액세스 또는 리소스에 대한 각 스레드 "잠금"전에 동기화하는 가장 일반적인 방법은 방문 이후에 출시되어 잠금을 다시 사용할 수있을 때까지 잠금이 점유하는 잠금을 획득하려고 스레드가 대기
이위안 세마포어 잠금의 가장 간단한 종류, 스레드가 자원에 대한 단독 액세스에 적합합니다. 스레드가 잠금을 획득하면 잠금이 해제 될 때까지 잠금을 획득하려고 다른 스레드가 대기로 갈 것이다, 그것은 단지 두 가지 상태, 점령 비어 있습니다.
 
시스템 전체 신호의 양, 즉 획득 릴리스 어떤 스레드를 허용하는 것을 제외하고 이진 플래그와 유사 상당 뮤텍스, 리소스 액세스에 하나의 스레드 만 허용 세마포어 스레드가 다른 스레드에 의해 그 시스템을 획득 할 수있다 를 해제하고, 어떤 스레드 뮤텍스 뮤텍스 획득 요구 사항이 스레드가 잠금을 해제하기위한 책임을 질 것입니다, 다른 스레드가 해제 뮤텍스가 잘못되었습니다

  • 중요한 자원
    액세스는 뮤텍스에 중요한 자원을 보통 중요한 자원이라는 리소스에 대한 액세스를 제어하는 프로세스를 수
     

P (시험) / V (증가) 연산

동시에 액세스 세마포어 잠금 여러 스레드 폴리올 될 수 있도록하기 위해, 신호, 초기 값의 양을 지칭 N 동시 액세스 N 스레드 자원 세마포어 스레드 제 얻 액세스 세마포어 있도록, 다음 단계 (P) :

  1. 세마포어 1의 값을 저장
  2. 세마포어의 값은 대기에 덜 0보다 진행하는 경우

 
자원을 방문 후, 스레드는 세마포어, 다음 단계 (V)를 출시 :

  1. 세마포어 값을 더한 1
  2. 대기 세마포어 값이 1보다 작지 경우, 스레드를 깨워
     

추천

출처www.cnblogs.com/chenxinshuo/p/11932969.html