Изящно убить блокирующий поток в pthread C?

Допустим, у меня есть поток, который выглядит примерно так:

void my_thread(char *device_name) {
    int fd = open(device_name, O_RDONLY);
    struct input_event ev;

    while(1) {
        read(fd, &ev, sizeof(struct input_event));
        /* do something */
    }
}

Как мне остановить такой поток? Один из способов - использовать pthread_cancel , но я бы предпочел сделать это более изящно. Возможно, что-то вроде pthread_kill ? Однако в таком случае будет ли разблокирован метод чтения (как я предполагаю, должен) и как поток будет обрабатывать сигнал? Или это процесс, который должен это обработать?

Я был бы очень признателен за совет!

5
задан Albus Dumbledore 14 June 2011 в 10:33
поделиться