Supend / Resume Thread, в частности, выполнение в коде процессором Linux

Я работаю над программой, которая может быть запущена под PBS с определенным количеством процессоров, меньшим, чем общее количество процессоров. Ранее я говорил, что PBS применяет это ограничение, прерывая программу, если она превышает лимит.

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

Однако Linux не реализует pthread_suspend и тому подобное. И обходной путь заключается в использовании мьютексов, однако это работает на низком уровне с помощью цикла, который многократно проверяет состояние и блокирует его по возможности, т.е. он использует цикл процессора, даже если поток не работает, поэтому я использую этот метод, даже если запущено только N потоков> может использоваться N процессоров, и PBS завершит работу программы.

У кого-нибудь есть обходной путь, который не вызовет этой проблемы?

В конечном счете, моя цель состоит в том, чтобы предотвратить использование моей программой больше N процессоров без потери процессорного времени во время блокировки вызовов и решения этой проблемы (для Linux и Windows), с которым я был бы доволен.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]