|
Boost Users : |
Subject: Re: [Boost-users] Fwd: Boost coroutine/context libraries
From: Daniel Anderson (wonixen_at_[hidden])
Date: 2017-01-18 17:51:27
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_at_[hidden]>:
> 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 <oliver.kowalke_at_[hidden]>
> *To:* boost-users <boost-users_at_[hidden]>
> *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_at_[hidden]>:
>
>> --------------- Forwarded message (begin)
>>
>> Subject: Boost coroutine/context libraries
>> From: Gregory Laird <glaird_at_[hidden]>
>> 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_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> 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*
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net