Контекст основного потока, возвращающийся в другом аппаратном потоке, неопределенное поведение?
В настоящее время я работаю над библиотекой параллелизма для C++ с зелеными потоками, использующей кражу работы для балансировки нагрузки между планировщиками на нескольких аппаратных потоках.
Я прикрепил основной контекст к его аппаратному потоку, то есть он не может быть украден и, следовательно, перенесен в другие аппаратные потоки.
Я полагаю, что где-то читал, что если основной контекст, где его нужно украсть и вернуть (выйти) в другом аппаратном потоке, откуда он возник, это неопределенное поведение. Но я не могу найти какие-либо источники по этому вопросу сейчас.
Это неопределенное поведение? Цитирование источников было бы идеально.
1 ответ
Прежде всего, в стандарте C++ нет зеленых потоков. Таким образом, все дело в том, чтобы создавать свои собственные стеки и заменять их - неопределенное поведение. UB не означает, что что-то не будет работать. Это означает, что нет никаких гарантий, что он будет работать в любой стандартной системе.
Зеленые потоки / сопрограммы балансируют на краю UB, делая реализацию для каждой поддерживаемой платформы. Они работают, потому что они были написаны для конкретных платформ, и имеют клуджи для преодоления различных ошибок на этих платформах.