Если вы пишете программное обеспечение, в котором клиент платит за количество ядер процессора, которое использует программное обеспечение, то каков наилучший способ добиться этого в вашем коде C ++? Мои исследования привели меня к SetProcessAffinityMask
на Windows и sched_setaffinity
в системах POSIX.
Я думаю, что вы нашли лучший вариант. Ограничение числа потоков не очень хорошая идея, если вы хотите воспользоваться возможностями многопоточных процессоров.
Это интересный вопрос. Я не думаю, что у меня есть идеальное решение, но так как ответа пока нет, позвольте мне предложить следующее:
Если основная часть работы в вашей программе выполняется одним типом потока, просто не создавайте больше рабочих потоков, чем позволяет лицензия клиента. Поскольку один поток не может быть разделен для работы на нескольких ядрах, это накладывает жесткое ограничение.
(Я не думаю, что установка соответствия процессов процессору — это путь, так как его можно легко изменить во время выполнения. Поскольку он не требует какой-либо реинжиниринга или постоянных модификаций системы, я бы беспокоился, что это не обойдется чувствовать себя достаточно «плохо», чтобы помешать даже честным клиентам.)