[비교] 에세이 뮤텍스 세마포어

장점 :

"세마포어는 비동기 신호 안전한"(참고 [2])

단점 :

"나는 뮤텍스 조건 변수와 완전히 그 기능을 대체 할 수 있고, 적은 경향이 에러 있기 때문에, 필요하지 세마포어 동기화 기본 생각 ... 세마포어의 또 다른 문제는 보통 자신의 카운트 값을 가지고 있다는 것입니다 우리의 데이터 구조는 또한 "2 저장된 동일한 정보의 결과 길이 값을 갖는다 (참조 [1])

"신호를 증가시킬 수있는 스레드가 다른 스레드의 감소량은, 이러한 유연성은 동기 설계의 열악한 구조를 일으킬 수있다"(참고 [2])

 결론 :

세마포어 응용 프로그램은, 뮤텍스 + 조건 변수로 대체 간주 될 수 있습니다.

세마포 동시은 "고토"일반적으로 같은 프로그래밍하지만, 간단한 인터페이스, 쉬운 호출을 수행합니다.

------------------------------------------

또한, 올바른 잘못된 생각 : 뮤텍스 등가 (1)의 양의 신호 값.

오직 당신 만이 제조자에 손 하나를 작성해야 - 소비자 싱글 데모 이해할 수있다.

예 1 :

1  // 부호화 스레드 
2  thread_encode () {
 . 3    sem_wait (task_assigned)의] // 차단 대기 태스크 
. 4    인코딩 ()
 . 5    sem_post (task_done)  // 통지 작업 완료 
6  }
 7  // 태스크 쓰레드 
8.  thread_main () {
 9.    sem_wait (task_done)들;  // 태스크의 완료를 기다리지 차단 
10    send_data_if_has ()
 . 11    New_Task ();
 (12)가된다    (task_assigned) sem_post; // 발행 통지 태스크 
13이다  }
 14 sem_init을 (task_done, 0 , 1이다. );// 초기 상태 "작업이 완료되지" 
15 (, task_assigned sem_init를 0 , 0 ) // 작업의 새로운 할당을

비교 예 2

1  // 编码线程
2  thread_encode () {
 3      에 pthread_mutex_lock ( 뮤텍스);
4    인코딩 ();
5      pthread_mutex_unlock을 ( 뮤텍스);
6  }
 7  // 任务线程
8  thread_encode () {
 9      에 pthread_mutex_lock ( 뮤텍스);
10    send_data_if_has ();
11    new_task ();
12    pthread_mutex_unlock을 ( 뮤텍스);
13 }

 

 

참고

[1] "리눅스 멀티 스레드 서버 측 프로그래밍,"잠금 및 세마포어를 사용하지 않는 읽고 쓸 수 있도록 동기화 필수 장 2.3 스레드

비교 [2] "리눅스 프로그래밍 매뉴얼"P907 POSIX에서는 Pthreads 뮤텍스 세마포어

 

추천

출처www.cnblogs.com/i-am-normal/p/11710788.html