LINUX.ORG.RU

Fast signal handler switching & thread-specific handler.


0

0

Поделитесь мыслями насчет такой схемы:

void (*variable_handler)(args);

void global_handler(args) { (*variable_handler)(args); }

И кто-то другой (тред) как-то на лету меняет variable_handler. Т.е. для разных variable_handler действия для определенных сигналов будут разные, ну а смена хендлера будет очень быстрой, если это нужно.

Вот, и вторая схема:

pthread_key thread_specific_handler_key;

void global_handler(args) { void (*thread_h)() = pthread_getspecific(thread_specific_handler_key); (*thread_h)(args); }

Это тоже, насколько я понимаю, в Линуксе работать будет очень быстро. При рождении тредов нужно, конечно, устанавливать его хендлер. Но насколько корректны обе схемы? Жду мнений :)

anonymous

Сорри...

Поделитесь мыслями насчет такой схемы:

void (*variable_handler)(args);

void global_handler(args) {
  (*variable_handler)(args);
}

И кто-то другой (тред) как-то на лету меняет variable_handler. Т.е.
для разных variable_handler действия для определенных сигналов будут
разные, ну а смена хендлера будет очень быстрой, если это нужно.

Вот, и вторая схема:

pthread_key thread_specific_handler_key;

void global_handler(args) {
  void (*thread_h)() = pthread_getspecific(thread_specific_handler_key);
  (*thread_h)(args);
}

Это тоже, насколько я понимаю, в Линуксе работать будет очень быстро.
При рождении тредов нужно, конечно, устанавливать его хендлер.
Но насколько корректны обе схемы?
Жду мнений :)


anonymous
()
Ответ на: комментарий от anonymous

Доступ к глобальным переменным еще надо бы синхронизировать как-нибудь ;) А в остальном - почему бы и нет ...

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.