c언어 세마포어 예제

세마포를 잠그거나 기다릴 수 있습니다 sem_wait 함수: 세마포를 뮤텍스로 사용할 때 일반적으로 뮤텍스가 잠금 해제되었음을 나타내기 위해 세마포를 1로 초기화합니다. 즉, 하나의 스레드가 차단없이 세마포를 통과 할 수 있습니다. 이제 IPC 세마포에 대한 ID를 가져오는 것으로 시작합니다. 스레드가 세마포에서 대기할 때 값을 감소시키기 전에 뮤텍스를 잠그야 합니다. 세마포의 값이 음수가 되면 스레드는 „절전 모드 해제”를 사용할 수 있을 때까지 차단합니다. 차단되는 동안 뮤텍스가 잠금 해제되므로 다른 스레드가 신호를 표시할 수 있습니다. 상위에서는 세마포를 초기화하여 카운터가 1이 됩니다. @chmurli이 기사에서는 mutex를 사용하는 스레드 동기화에 대해 설명하므로 뮤텍스를 사용하는 방법에 대한 작은 예제를 제공했습니다. 나는 코드의 중요한 섹션에서 mutex를 사용했으며 이것이 잘못되었다고 생각하지 않습니다. @engeland „글로벌 변수는 mutexes에 의해 보호되어야하는 제한된 자원에 대한 나쁜 예입니다” 당신은 당신의 문을 정당화하시기 바랍니다 수 있습니까? 리눅스 시스템에서, 우리는 POSIX 세마포 라이브러리를 얻을 수 있습니다.

그것을 사용 하려면, 우리는 semaphos.h 라이브러리를 포함 해야 합니다. 다음 옵션을 사용하여 코드를 컴파일해야 합니다. 세마포로 해결할 수있는 모든 문제는 조건 변수 및 뮤텍스로 해결할 수 있습니다. 이것이 사실임을 증명하는 한 가지 방법은 조건 변수 및 뮤텍스를 사용하여 세마포를 구현하는 것입니다. POSIX 표준은 세마포에 대한 인터페이스를 지정합니다. Pthread의 일부가 아니지만 Pthread를 구현하는 대부분의 UNIX는 세마포를 제공합니다. 위의 예제는 정적으로 선언된 `카운터` 변수를 잘 작동합니다. 나는 gcc를 사용하여 예제를 실행할 때. 이 장의 코드는 이 책의 리포지토리에 있는 디렉터리 세마포에 있습니다(섹션 0.1 참조). pthread 및 posix 세마포를 사용하는 프로그램을 컴파일하려면 gcc -o xfilename filename.c -lpthread -lrt 뮤텍스를 사용하여 값 및 웨이크업에 대한 독점적 인 액세스를 제공합니다. cond는 세마포에서 기다리는 경우 조건 변수 스레드가 대기하는 조건 변수 스레드입니다.

계속하기 전에 조건 변수 및 뮤텍스를 사용하여 sem.h에서 세마포 API를 구현하는 함수를 작성하는 연습으로 이 작업을 시도해 볼 수 있습니다. 이 책의 리포지토리에 mysem.c 및 mysem.h에 솔루션을 넣을 수 있으며 mysem_soln.c 및 mysem_soln.h에서 내 솔루션을 찾을 수 있습니다. 나는 모든 의미에서 chmurli에 동의해야합니다! 이런 식으로 스레드에 대한 코드를 작성하는 것은 실패일 뿐입니다. 전역 변수는 mutexes에 의해 보호되어야 하는 제한된 리소스에 대한 나쁜 예입니다. 적어도 당신의 선택에 코멘트, 그래서 초보자는 생산 코드에서 이러한 코드를 작성 하는 유혹 하지 않습니다. 전역 변수의 복사본을 스레드 로컬 변수로 보호하는 경우 약간 (여전히 좋지 않은) 더 나은 예가 되었을 것입니다. 세마포는 프로세스 동기화 및 멀티스레딩에 매우 유용합니다. 그러나 예를 들어 C 언어로 말하는 실제 생활에서 하나를 사용하는 방법은 무엇입니까? 스레드는 우아하고 효율적인 프로그램 작성을 크게 단순화할 수 있습니다.

Comment is closed.