bus icon indicating copy to clipboard operation
bus copied to clipboard

Implement "rendez-vous" mode

Open 64kramsystem opened this issue 5 years ago • 1 comments

(This is related to #7, however, that treats a buffer size of 0 as inappropriate value, here it's to discuss its usefulness).

The stdlib mpsc module has a sync_channel(bound: usize)](https://doc.rust-lang.org/std/sync/mpsc/fn.sync_channel.html) method.

The case where bound == 0 is actually made explicit:

Note that a buffer size of 0 is valid, in which case this becomes "rendezvous channel" where each send will not return until a recv is paired with it.

I think that this should not be discarded as "not useful". The reason is that, with a buffer size of 0, this library can be used effectively (for example) to sync threads. By waiting for all receivers to read, a sender can ensure that all the receivers are in the expected state. mpsc can do that, but it's significantly slower.

64kramsystem avatar Aug 28 '20 21:08 64kramsystem

Using bound == 0 as a synchronizing channel makes a lot of sense, though unfortunately (as I referenced in that issue), making the implementation support this use-case is actually fairly tricky. Happy to take a look at a PR if you want to take a stab at implementing it though!

jonhoo avatar Aug 28 '20 21:08 jonhoo