yield
- это, по сути, способ реализации ограниченной формы сопрограмм.
Если вы хотите достаточно сильно, вы можете (как в «людях») реализовать относительно полные сопрограммы в C, используя setjmp
и longjmp
.В C ++ вы можете , вероятно, сделать то же самое, хотя я не совсем уверен.Проблема с C ++ заключается в том, чтобы решить, какие dtors выполнять когда.Не случайно, я думаю, что ответ заключается в том, что использование сопрограмм не должно влиять на dtors, но я не особо задумывался об этом.Если предположить, что это правильно, то для C ++ должен работать примерно такой же код, как и для C.
C ++ 0x добавляет полную поддержку потоков и тому подобное.Хотя это может быть неуклюжим и / или увеличивать накладные расходы, почти все, что вы можете надеяться сделать с волокнами, вы также можете делать с потоками.Таким образом, он будет поддерживать идиому чуть более напрямую, поэтому реализация будет намного проще.