세마포는 sem_init(프로세스 또는 스레드의 경우) 또는 sem_open(IPC의 경우)을 사용하여 초기화됩니다. int sem_init(sem_t *sem, int pshared, 서명되지 않은 int 값); IEEE Std 1003.1-2001의 이 볼륨이 성공적인 반환 값을 지정하지 못하지만 sem_init() 호출이 성공하면 이후 버전에서 0값을 반환하기 위해 구현이 필요할 수 있습니다. 스레드는 우아하고 효율적인 프로그램 작성을 크게 단순화할 수 있습니다. 그러나 이전 예제의 변수 cnt와 같이 여러 스레드가 공통 주소 공간을 공유하는 경우 문제가 있습니다. sem_init() 함수는 sem에 의해 언급된 명명되지 않은 세마포를 초기화한다. 초기화 세마포의 값은 값이어야 한다. sem_init()에 대한 성공적인 호출 후, 세마포는 sem_wait(), [TMO] sem_timewait(), sem_trywait(), sem_post() 및 sem_destroy()에 대한 후속 호출에 사용될 수 있습니다. 이 세마포는 세마포가 파괴 될 때까지 사용할 수 있습니다. 세마포는 프로세스 동기화 및 멀티스레딩에 매우 유용합니다. 그러나 예를 들어 C 언어로 말하는 실제 생활에서 하나를 사용하는 방법은 무엇입니까? man 3 sem_init에 따르면 sem_init()에 관한 한 프로토타입은 다음과 같은 간단한 예입니다. mythread 변수를 해제하는 것을 기억하십시오. 실제로 힙에 mythread를 할당 할 필요가 없으며 일반적으로 8바이트 메모리가 필요한 긴 int 형식입니다. (1) POSIX 세마포의 두 가지 종류가 있습니다 – 이름과 이름 – 그리고 당신은 둘 다 혼합하고 있습니다.
명명되지 않은 세마포는 sem_init 및 sem_destroy를 사용합니다. 명명 된 사용 sem_open, sem_close 및 sem_unlink. 활동 2. 프로그램이 항상 예상 출력(값 2*NITER)을 생성하도록 프로그램 badcnt.c를 수정하는 가이드로 위의 예제를 사용합니다. 코드를 수정하기 전에 badcnt.c의 복사본을 goodcnt.c로 만듭니다. pthread 및 세마포의 역학을 보여 주기 위해이 코드를 제공 해 주셔서 감사합니다. Windows의 POSIX pthreads빌드에 다음 패키지를 추가할 수 있습니다. 나는 리눅스에서 우리의 C 소스 코드를 변경하지 않고 우리에게 쉽게 사용할 수있는 동등한 추가 패키지가있을 것이라고 가정합니다. ftp://sourceware.org/pub/pthreads-win32/dll-latest 패키지 .h 및 .lib에서 VS 프로젝트에 포함됩니다.