Re: [go-nuts] sync.Map for caching

2017-09-01 Thread Henrik Johansson
If you absolutely must make sure you ever create 2 instances of any value
in the map then I guess you have to lock.
Otherwise you can maybe use map.LoadOrStore?

fre 1 sep. 2017 kl 00:18 skrev bep :

> sync.Map in Go 1.9 is a little low on examples/doc in the wild, so I
> thought I should ask here.
>
> The new type is promoted as a replacement for  RWMutex in mostly read use
> cases with stable keys. I assume that a typical in memory cache would fit
> that description.
>
> With RWMutex, if the cost of creating the cache item is high, I would
> maybe do something ala:
>
> mu.RLock()
> // Check cache
> mu.RUnclock()
>
> // Return if found
>
> // If Not found:
> mu.Lock()
> defer mu.Unlock()
> // Double check cache, return if found
> // Create item and put in cache
>
>
>
>
> I don't see how the above can be written with a sync.Map without adding a
> mutex.
>
> bep
>
> --
> 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.
>

-- 
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.


[go-nuts] sync.Map for caching

2017-08-31 Thread bep
sync.Map in Go 1.9 is a little low on examples/doc in the wild, so I 
thought I should ask here.

The new type is promoted as a replacement for  RWMutex in mostly read use 
cases with stable keys. I assume that a typical in memory cache would fit 
that description.

With RWMutex, if the cost of creating the cache item is high, I would maybe 
do something ala:

mu.RLock()
// Check cache
mu.RUnclock()

// Return if found

// If Not found:
mu.Lock()
defer mu.Unlock()
// Double check cache, return if found
// Create item and put in cache




I don't see how the above can be written with a sync.Map without adding a 
mutex.

bep

-- 
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.