On Thu, May 6, 2021 at 6:40 AM 'Axel Wagner' via golang-nuts
<golang-nuts@googlegroups.com> wrote:
>
> FWIW after all this discussion I *am* curious about a more detailed argument 
> for why we can't have a priority select that guarantees that if the 
> high-priority case becomes ready before the low-priority one (in the sense of 
> "there exists a happens-before edge according to the memory model"), the 
> high-priority will always be chosen.
>
> That is, in the example I posted above, we do know that `hi` becoming 
> readable happens-before `lo` becoming readable, so a true prioritized select 
> would always choose `hi` and never return. The construct we presented does 
> return.
>
> Now, I do 100% agree that it's not possible to have a select that guarantees 
> that `hi` will be read if both become readable concurrently. But I don't see 
> a fundamental issue with having a select that always chooses `hi` if `hi` 
> becoming readable happens-before `lo` becoming readable.
>
> And to be clear, I also kinda like that we don't have that - I think the 
> value provided by the pseudo-random choice in preventing starvation is worth 
> not having an "ideal" priority select construct in the language. But I 
> couldn't really make a good case why we can't have it.

I believe that we could implement a select statement that supports
priority cases, such that when multiple cases are ready, and at least
one is a priority case, then we would always choose one of the
priority cases.

The reason we don't have such a feature is not because of
implementation difficulty.  It's because the feature isn't needed, and
because, as this thread indicates, it tends to confuse people.  In
particular it's easy for people to be misled into thinking that if a
low priority case is chosen then at that point none of the high
priority cases can be ready, but of course that is false (as the high
priority case may have become ready in the span of time between
choosing the low priority case and starting to execute the associated
statements).

Ian

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcW-YzLekWB6LSn8rCEqLW5reEr9OFTHSY19hau%3D6_ja-g%40mail.gmail.com.

Reply via email to