동기를 위해 POSIX 세마포 (초기 값 = 1을 가진 뮤텍스로 사용됨)를 사용하는 스레드 안전 라이브러리를 작성해야합니다. 비동기 신호를 올바르게 관리하기 위해 몇 가지 문제점을 발견했습니다. 이 정적 라이브러리 및 응용 프로그램 (다중 스레드) 라이브러리 함수를 호출하는 응용 프로그램을했습니다. 구조가 POSIX 세마포어에 의해 제어되는 몇 가지 내부에 대한 접근은 (는 도서관 내부의) : 비동기 신호 경우다중 스레드 응용 프로그램에서 비동기 신호로 공유 POSIX 세마포를 관리하는 방법
void library_func1(lib_handler *h)
{
sem_wait(sem);
/* do some stuff with global data */
sem_post(sem);
}
void library_func2(lib_handler *h)
{
sem_wait(sem);
/* do some stuff with global data */
sem_post(sem);
}
void library_close(lib_handler *h)
{
...
}
무엇,의는 SIGINT
을 가정 해 봅시다의 첨부 제기되고 하나 개의 스레드가 세마포어를 고정 할 때? semaphore가 존재하고 값이 0
이기 때문에 나는 응용 프로그램을 다시 시작하면 교착 상태가 발생합니다. 비동기 신호가 발생했을 때 세마포어를 해제 할 수있는 함수가 library_close
인데, 이것을 수행하는 가장 좋은 방법은 무엇입니까? (나는 그 함수가 exit
뒤에 오는 경우에만 신호 안전성이 있다고 생각합니다)? 멀티 스레드 응용 프로그램에서는 일반적으로 모든 신호에 대해 단일 스레드 관리자를 사용하는 것이 좋습니다.이 스레드는 라이브러리에 있거나 응용 프로그램에서 시작해야합니다.
감사합니다.
세마포는 응용 프로그램간에 공유됩니다. – MirkoBanchi
어떻게? 어떤 유형의 프로세스 간 통신 체계를 사용하고 있습니까? – insomniac2846
POSIX 세마포어는 예를 들어'/ dev/shm '을 통해 액세스 할 수 있으므로 프로세스간에 공유됩니다. – MirkoBanchi