Это небольшая часть результатов, которые следует выполнить до this question.Приостановление выполнения нитей в обработчике сигналов
Предположим, что я использую sigaction
, чтобы настроить обработчик сигналов моего собственного дизайна. В этом обработчике сигналов я получаю информацию о состоянии CPU (например, указатель стека потока) и копирую его в заданное место в памяти. Теперь я хочу проверить значение в стеке этого потока из другого потока.
Есть ли способ приостановить выполнение потока в обработчике сигнала из одного обработчика сигнала, чтобы я мог безопасно исследовать стек этого потока из другого потока? (Примечание: я определяю «безопасно» здесь, чтобы означать «не беспокоясь о завершении или возврате нити из функции.)
Если я был снаружи обработчика сигналов, я мог бы использовать sigsupend
, однако использовать его небезопасно внутри обработчика сигнала в соответствии с the GNU documentation. Я мог бы также попытаться простирающийся сигнал, используя метод, описанный в this question, но я не думаю, что любой стандартный * NIX сигналы поможет мне здесь.
Я не уверен, что я следую - я ищу, чтобы приостановить нить в первую очередь, а не разбудить ее. Не могли бы вы продумать, пожалуйста? – tonysdg
Где вы хотите использовать 'sigsuspend',' read (pipefd, ...) 'вместо этого. Является ли измененный ответ более ясным? Вы можете удерживать нить до тех пор, пока вам нравится, и разбудить ее, написав на другом конце трубы. – pilcrow
Намного яснее - спасибо !! – tonysdg