Создайте класс, который представляет собой поток. Класс должен работать аналогично std::thread
. Возможность передавать аргументы вызываемой внутри потока функции как аргументы конструктора std::thread
реализовывать необязательно: std::thread([] (int a, int b) {...}, a, b); // это необязательно
std::thread([a,b]() {...});
Для реализации воспользуйтесь следующими системными вызовами: В классе должны работать, по крайней мере, следующие методы: - конструктор,
- деструктор,
- оператор присваивания с перемещением,
- метод
join
, - метод
joinable
, - метод
get_id
, - метод
swap
.
Правильные опции системного вызова clone(2)
есть в презентации. Для принудительного завершения потока используйте сигнал SIGTERM
. Список всех сигналов есть в руководстве signal(7)
. Оригинальные страницы руководства на английском языке есть на сайте man7.org. Выходное значение всех системных вызовов нужно проверять с помощью функции check
из презентации.