nptl SIGCONT и планирование потоков - PullRequest
2 голосов
/ 19 апреля 2010

Я пытаюсь перенести код, который использует SIGCONT, чтобы остановить определенные потоки приложения. С текущей реализацией Linux nptl, кажется, нельзя полагаться на это в ядрах 2.6.x. Я пытаюсь разработать метод, чтобы остановить другие темы. В настоящее время я могу думать только о мьютексах и условных переменных. Любые намеки приветствуются.

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

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

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

Я уверен, что это возможно, но также вы делаете это неправильно.


Примечание: такие мьютексы, вероятно, существуют в частях библиотеки C, даже если в вашем собственном коде их нет. Если у вас ничего нет в вашем собственном коде, и это нетривиально, я был бы удивлен.

0 голосов
/ 19 апреля 2010

Как вы отправляете сигналы целевому потоку? Если вы используете pthread_kill() для отправки SIGSTOP / SIGCONT в один поток, это должно работать.

...