Приостановка
1. Если вы хотите приостановить поток monitor , но только временно (т.е. внести какие-либо изменения), тогда вы можете просто использовать мьютекс. Заблокируйте его, прежде чем получить доступ к общему вектору, и разблокируйте его, когда вы закончите, гарантируя, что только один поток может одновременно получить доступ к данным.
2. Вы можете активно приостановить поток, используя поддержку ОС, такую как SuspendThread
и ResumeThread
, в случае Windows, когда он будет готов.
Завершение
1. Вы можете использовать событие для каждого потока monitor , имя которого будет связано с идентификатором, будет работать. На каждой итерации монитора проверяйте событие завершения, завершая поток, если он активен.
2. Передайте некоторую переменную каждому потоку, сохраните их на карте, ключом которой является дескриптор потока, и аналогично предыдущему параметрупросто проверьте значение для каждой итерации.
3. Сохраните все потоки в карте с дескриптором в качестве ключа, завершив его напрямую с поддержкой ОС.
Честно говоря, существует множество способов сделать это, наилучшая реализация зависит от того, почему именно вы хотите остановить поток монитора. Любой объект синхронизации, такой как мьютекс, должен работать, если вы читаете из одного потока и пишете из другого. В противном случае достаточно просто сохранить все потоки с внутренним идентификатором в качестве ключа и значение потока в качестве значения для завершения потоков монитора по требованию.