Не существует единственного правильного способа приостановить и возобновить поток.
Во-первых, нет никакого способа сделать это без взаимодействия с кодом, выполняемым потоком.В противном случае может произойти сбой, если вы приостановите поток, в то время как он удерживает блокировку, которую поток, который должен возобновить, должен получить, прежде чем он сможет возобновить.Таким образом, вы должны иметь код, который выполняет поток, который вы хотите приостановить.
С помощью потока вы можете делать это так, как вам нравится.У вас может быть атомарный тип, который поток периодически проверяет.Вы можете просто не дать нити работать, если она предназначена для приостановки, когда у нее нет работы.
Нет единственно верного пути, и это полностью зависит от других дизайнерских решений.Прежде всего, это зависит от того, что делает этот код, и почему вы хотите приостановить его.
Еще одна вещь, которая чрезвычайно важна: всякий раз, когда вы чувствуете, что вам нужно проникнуть в поток извне и заставить его сделать илине делать что-то, это должно быть знаком для вас, что вы изначально неправильно написали нить.Поток должен знать, какую работу он должен выполнять и когда он должен не выполнять работу по собственному проекту.Если что-то еще должно «проникнуть» навязчиво и заставить это делать или не делать вещи, вам следует пересмотреть проектные решения, которые привели вас к этой точке.
И к вашей конкретной точке:
Я хочу использовать функцию pthread_kill () с сигналами SIGSTOP и SIGCONT для потоков.
Это не может работать.Что делать, если поток удерживает внутреннюю блокировку библиотеки, которую необходимо получить для возврата из pthread_kill
?Поток, пытающийся приостановить его, также приостановит сам себя.В любом случае SIGSTOP
определяется как остановка процесса , а не потока.