Я работаю над программой, которая может быть запущена под PBS с определенным количеством процессоров, меньшим, чем общее количество процессоров. Ранее я говорил, что PBS применяет это ограничение, прерывая программу, если она превышает лимит.
Моя программа будет использовать потоки, однако они будут иметь несколько команд блокировки, и я хочу запустить другие потоки в течение этого времени, поэтому я бы хотел, чтобы поток был приостановлен и помещен в очередь, в то время как другой поток будет возобновлен.
Однако Linux не реализует pthread_suspend и тому подобное. И обходной путь заключается в использовании мьютексов, однако это работает на низком уровне с помощью цикла, который многократно проверяет состояние и блокирует его по возможности, т.е. он использует цикл процессора, даже если поток не работает, поэтому я использую этот метод, даже если запущено только N потоков> может использоваться N процессоров, и PBS завершит работу программы.
У кого-нибудь есть обходной путь, который не вызовет этой проблемы?
В конечном счете, моя цель состоит в том, чтобы предотвратить использование моей программой больше N процессоров без потери процессорного времени во время блокировки вызовов и решения этой проблемы (для Linux и Windows), с которым я был бы доволен.
Задача ещё не решена.
Других решений пока нет …