> The answer depends on whether you have just one value or many. For a single
> value (sometimes known as a "future"), I tend to pair a chan of struct{}
> with a value to be set. To make the value available, set it, then close the
> channel. Readers wait on the channel, then read the value.

That's an interesting idea.  Surprisingly enough, it turns out to be
only slightly slower than the obvious implementation with a mutex, and
(even more suprisignly) actually faster when using hardware threading.
This is on a 2-core hyperthreaded SandyBridge (4 hardware threads):

BenchmarkMutexFuture            100000000               22.2 ns/op
BenchmarkMutexFuture-2          50000000                39.9 ns/op
BenchmarkMutexFuture-4          20000000                86.0 ns/op
BenchmarkAtomicFuture           200000000                7.01 ns/op
BenchmarkAtomicFuture-2         500000000                3.69 ns/op
BenchmarkAtomicFuture-4         1000000000               2.69 ns/op
BenchmarkChannelFuture          50000000                29.7 ns/op
BenchmarkChannelFuture-2        50000000                54.6 ns/op
BenchmarkChannelFuture-4        20000000                64.4 ns/op

Code here: https://play.golang.org/p/Wm71o50HJ8

-- Juliusz

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to