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 <glaird@northgatebowl.com>:
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 -----
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 <glaird@northgatebowl.com>:
--------------- Forwarded message (begin)

Subject: Boost coroutine/context libraries
From: Gregory Laird <glaird@northgatebowl.com>
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