Yes, you can use markers around your stack, and you verify them once you
get control back, or at the end when the coroutine terminate
often debug version of new/delete will provide this facility which can be
leverage when allocation your stack.
but if a coroutine has written outside the stack, it could have corrupted
the program memory enough that you will not be able to recover and report
the error.
there might be something in low level of your C++ runtime which you can
hook to know when a function is called and how much stack it needs. if this
facility exist then you can leverage it to prevent you coroutines from
overflowing the stack. It used to be possible with Microsoft C++, I do not
know with gcc or clang.
2017-01-18 14:38 GMT-05:00 Gregory Laird
Thank you Oliver for the suggestion. I will have a look. I think you are correct--and this was my feeling as well--that the context functionality is perfect for what I want to do. I just have to get where I understand it.
Question: If I allocate too small of a stack, and something gets written outside of the allocation, is there any way to know that this has occurred?
Thanks, Greg Laird
----- Original Message ----- *From:* Oliver Kowalke
*To:* boost-users *Sent:* Wednesday, January 18, 2017 5:54 AM *Subject:* Re: [Boost-users] Fwd: Boost coroutine/context libraries 2017-01-18 2:20 GMT+01:00 Gregory Laird
: --------------- Forwarded message (begin)
Subject: Boost coroutine/context libraries From: Gregory Laird
Date: Tue, 17 Jan 2017 17:10:57 -0800 Newsgroup: gmane.comp.lib.boost.user I am trying to write a cooperative task scheduler in c++ and I have discovered the boost context and coroutine libraries. I have written these sorts of schedulers many times in assembly language so I appreciate the issues in the methodology. I have written lots of c code but am less versed in c++.
I have been trying to find some straightforward examples of the libraries use without a lot of extraneous c++ language elements (e.g. binds, lambdas, etc.). I did find one example
http://stackoverflow.com/questions/11716291/boost-context-class
that is very nice, but it will not compile now with the current boost library. I get an error saying that boost::context::fcontext_t has been removed from the public api.
Could someone direct me to some examples that demonstrate the context or coroutine functionality that would be easier to understand.
I want to write a scheduler that is very similar to the example listed above where coroutines yeild back to a main caller which then chooses the next coroutine to continue its processing.
- I would use boost.context instead of boost.coroutine(2) for implementing a scheduler - boost.context contains an directory ('example') which does contains not too complicated C++ code
------------------------------
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Daniel *L'action accède à la perfection quand, bien que vivant, vous êtes déjà mort* *Bunan*