2016-01-31 3 views
0

Я новичок в Linux, поэтому я точно не знаю, как решить проблему.Отменить нить сна на Linux

В моем основном я создаю много рабочих потоков, каждый выполняет свою задачу и спит в течение нескольких секунд.

В некоторых случаях мне нужно прекратить действие. Мне нужно избегать завершения каждого сеанса сна, поэтому я хочу отправить сигнал в каждый поток, чтобы прервать сон (нанослое в моем случае) и завершить цикл threadproc.

Я прочитал много документов о pthread_kill, но когда я отправляю, например, SIGUSR1 в поток, процесс заканчивается ненормальным способом.

Может ли кто-нибудь указать мне на решение?

спасибо!

Edit:решаемые, решение было pthread_cond_timedwait и pthread_cond_signal.

+2

Возможно, вы захотите «переменные условия» Google. – Galik

+0

Вы говорите о pthread_cond_timedwait? С уважением. –

+1

Я не знаю детали вашего кода, но это звучит как задание для переменных состояния: http://www.cs.nmsu.edu/~jcook/Tools/pthreads/pthread_cond.html – Galik

ответ

0

При отправке сигнала вы поступаете правильно. Единственное, чего не хватает, это поймать этот сигнал. Вы должны заменить действие с вашим собственным. В обработчике сигнала вы можете установить переменную и проверить ее после возврата сна. Посмотрите на sigaction

1

Я не знаю деталей вашего кода, но это звучит как работа для переменных условия: cs.nmsu.edu/~jcook/Tools/pthreads/pthread_cond.html - Galik

Я только реализовать решение, основанное на pthread_cond_signal и pthread_cond_timedwait и I подтвердите, что если работает !!! - Dare Devil

Смежные вопросы