Как я могу реализовать сходство потоков в C ++ - PullRequest
0 голосов
/ 13 сентября 2018

Я использую сторонний API, который требует привязки к потоку, т. Е. Сторонний API возвращает дескриптор, который любые последующие сторонние вызовы API, использующие этот дескриптор, должны выполнять в том же самом потоке. Каков наилучший способ реализовать это в стандарте C ++ 11 (без использования сторонних библиотек, например, boost и т. Д.)?

В идеале я хотел бы иметь возможность передавать в замыканиях формы

[&] { return api_function(_handle, parameters); }

потоку, для которого создается дескриптор, если это вообще возможно.

Вначале я хотел создать std :: thread, который выполняет задачи, добавленные в std :: queue. Это лучшее решение?

1 Ответ

0 голосов
/ 14 сентября 2018

любые последующие сторонние вызовы API, использующие этот дескриптор, должны выполняться в одном и том же потоке

Это не сходство (в контексте обработки) - привязка потока или всего процесса к конкретному процессору / ядру.Вам нужно убедиться, что ни один другой поток не выполняет ваши задачи - независимо от того, на каком процессоре работает поток, или продолжает ли он работать на том же модуле или переключается на другой.

Вначале я хотел создать std :: thread, который выполняет задачи, которые добавляются в std :: queue.Это лучшее решение?

Ну, это определенно может сработать для вас.Вы будете отправлять задачи из любого потока, скажем, в std::queue<std::function<RetValType()>> (просто убедитесь, что синхронизирован доступ), и вызывать pop() для него по одному из единственного потока, которому разрешено это делать.

Это работает в соответствии с вашим запросом о вставке выражений такого рода:

[&] { return api_function(_handle, parameters); }

в очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...