Captura de sinais como SIGSEGV e SIGFPE no programa multithread

Eu estou tentando escrever um sistema de log multithreaded para um programa em execução no linux.

Chamadas para o sistema de registro nas threads do programa principal empurram uma estrutura de dados contendo os dados a serem registrados em uma fila FIFO. Um encadeamento dedicado seleciona os dados da fila e gera os dados, enquanto o encadeamento principal dos programas continua com sua tarefa.

Se o programa principal fizer com que o SIGSEGV ou outros sinais sejam gerados, preciso ter certeza de que a fila está vazia antes de terminar.

Meu plano é bloquear os sinais usando pthread_sigmaskhttp://man7.org/linux/man-pages/man3/pthread_sigmask.3.html para todos, mas um segmento, mas lendo a lista de sinais emhttp://man7.org/linux/man-pages/man7/signal.7.html Percebi:

Um sinal pode ser gerado (e, portanto, pendente) para um processo como um todo (por exemplo, quando enviado usando kill (2)) ou para um segmento específico (por exemplo, determinados sinais, como SIGSEGV e SIGFPE,> gerados como conseqüência de executar uma instrução de linguagem de máquina específica são direcionadas por encadeamento, assim como os sinais direcionados a um encadeamento específico usando pthread_kill (3)).

Se eu bloquear o SIGSEGV em todos os encadeamentos, mas um encadeamento dedicado à captura de sinais, ele irá capturar um SIGSEGV criado por um encadeamento diferente?

Eu encontrei a perguntaManipulação de sinal com vários threads no Linux, mas eu não tenho noção de quais sinais são específicos do segmento e como capturá-los.

questionAnswers(1)

yourAnswerToTheQuestion