在处理线程(光纤)调度类时,我发现自己编写了一个永远不会返回的函数:
// New thread, called on an empty stack
// (implementation details, exception handling etc omitted)
[[noreturn]] void scheduler::thread() noexcept
{
current_task->state = running;
current_task->run();
current_task->state = finished;
while (true) yield();
// can't return, since the stack contains no return address.
}
这个函数永远不会被直接调用(由thread();
)。在切换到新上下文之后,它仅由jmp
来自汇编代码的“调用”,因此它无法在任何地方“返回”。最后,对的调用会yield()
检查state == finished
该线程并将其从线程队列中删除。
这会是对[[noreturn]]
属性的有效使用吗?如果是这样,它会以任何方式帮助吗?
编辑:不是重复的。我了解该属性通常用于什么。我的问题是,在这种特定情况下它会做些什么吗?