|
Boost Users : |
Subject: Re: [Boost-users] Boost intrusive list volatile hook
From: nat ersoz (natersoz_at_[hidden])
Date: 2018-11-26 19:12:55
I am fully aware that volatile is not sufficient when dealing with
interrupts and this specific problem.
That is not the question. The question is this:
*Can I qualify the list hook with volatile and still use the boost
intrusive list?*
I realize that I can modify or write my own intrusive list.
I would prefer to keep in step with boost if possible.
On Sun, Nov 25, 2018 at 10:56 PM Stian Zeljko Vrba <vrba_at_[hidden]> wrote:
> Interrupts are like threads, except worse because you have also reentrancy
> issues (e.g., can IRQ A happen while the handler for IRQ A is still
> running, possibly outside of IRQ context). Volatile is not sufficient for
> several reasons, not the least because insertion/removal into a linked list
> is not an atomic operation. As I see it you have two choices:
>
>
>
> 1. Introduce fine-grained locking of list nodes by customizing
> boost.intrusive (you have to be careful because itâs easy to end up in a
> deadlock due to reentrancy issues â unless you have some constraints, like
> IRQ levels, that can prevent this.)
> 2. Use a lock-free list
>
>
>
> You should read about how operating systems (Windows, Linux) tackle these
> issues.
>
>
>
> *From:* Boost-users <boost-users-bounces_at_[hidden]> *On Behalf Of *nat
> ersoz via Boost-users
> *Sent:* Sunday, November 25, 2018 18:38
> *To:* boost-users_at_[hidden]
> *Cc:* nat ersoz <natersoz_at_[hidden]>
> *Subject:* [Boost-users] Boost intrusive list volatile hook
>
>
>
> I intend to use the boost intrusive list to implement an observer pattern.
>
> - The list will cross interrupt boundaries; meaning one interrupt will
> produce the notifications and the other interrupt will observer the
> notifications.
>
>
> - The observer, in response to a notification, might detach itself
> from the list using the the hook's unlink() function.
>
>
> - I think that I will need the hook to be declared volatile in order
> to accommodate this.
>
> I have a minimal code sample here:
> https://github.com/natersoz/patterns/blob/master/observer/intrusive_list_member/test_observer_minimal.cc
>
>
>
> My list hook member declaration:
>
> using list_hook_type = boost::intrusive::list_member_hook<
>
> boost::intrusive::link_mode<boost::intrusive::auto_unlink>
>
> >;
>
>
>
> list_hook_type hook;
>
> My list declaration:
>
> using list_type =
>
> boost::intrusive::*list*<
>
> Observer<NotificationType>,
>
> boost::intrusive::constant_time_size<false>,
>
> boost::intrusive::member_hook<
>
> Observer<NotificationType>,
>
> typename Observer<NotificationType>::list_hook_type,
>
> &Observer<NotificationType>::hook>
>
> >;
>
> If I a the volatile keyword to the list hood type, I cannot figure out how
> to get the list_type declaration to fit into the list template list.
>
>
>
> Is it possible?
>
>
>
> Thank you.
>
>
> --
>
> Nat Ersoz
> 425-417-5182 (cell)
>
-- Nat Ersoz 425-417-5182 (cell)
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