Библиотека потоков в пользовательском пространстве
Я хотел бы знать, какие библиотеки потоков пользовательского пространства (для стандарта C++) доступны, которые позволяют детально контролировать упреждающее планирование на уровне приложений. Целевой платформой является POSIX, но было бы неплохо иметь кроссплатформенное решение.
3 ответа
Portable Runtime System имеет настраиваемое упреждающее планирование пространства пользователя, но написано на C.
Если достаточно установить приоритеты потоков, вы можете использовать pthreads: Как увеличить приоритет потоков в pthreads?, Если вы хотите иметь возможность составлять расписание вручную, вам следует использовать совместную многопоточность, такую как longjump или http://www.gnu.org/software/pth/pth-manual.html. Для использования нескольких процессоров вам понадобятся потоки ядра, которые вы можете получить через pthreads или OpenMP.
По сути, вы должны сначала создать пару потоков ядра, закрепить их и запустить дополнительные потоки взаимодействия поверх потоков ядра. Имейте в виду, что совместная многопоточность не является преимущественной, если вы не реализуете вытеснение с событиями таймера, но потоки ядра будут вытеснены. Некоторые кооперативные схемы потоков не работают с C++, в частности, они могут вызывать деструкторы переменных в стеке при переключении.
Стандартная библиотека C++11 имеет поддержку потоков, хотя она полагается на pthreads в Linux. Вы также можете использовать pthreads напрямую (это реализовано в C). Если вы хотите что-то переносимое - Qt имеет хорошую поддержку потоков.