Кто-нибудь знает класс переменных состояния, который позволяет уведомлять потоки, ожидающие уведомления о состоянии, в том порядке, в котором они начали ждать?
В настоящее время я использую класс boost condition_variable
, но вызов condition_variable::notify_one()
пробуждает случайный поток, а не поток, который сначала называется condition_variable::wait()
. Я также попытался добавить идентификаторы потоков в очередь перед вызовом condition_variable::wait()
, чтобы я мог вызвать condition_variable::notify_all()
на котором все ожидающие потоки просыпаются, проверять очередь и либо ждать снова, либо продолжать (только один поток, а именно, поток сначала в очереди). Проблема в том, что вызов notify_all()
дважды не гарантирует, что все потоки просыпаются дважды, тем самым теряя уведомления. Какие-либо предложения?
Странно, что вам нужно, чтобы потоки были разбужены в определенном порядке и звучат подозрительно в отношении вашего дизайна. В любом случае идея состоит в том, что у вас может быть очередь переменных состояния (по одному на поток), и вы вызываете notify_one()
для одного из верхней части очереди. В ожидающем потоке вам нужно сделать дополнительную логику, чтобы проверить, не прерывается ли она от ожидания. Опять звучит странно, почему вам нужна нить, чтобы проснуться в определенном порядке, и вы можете захотеть переосмыслить свой дизайн.