I've a race scenario used with Mutex.Lock with Lock() and Unlock(). now 
multi-routines try to lock the resource and start a few logical code if the 
Lock.Lock() succesfully. other routines don't need to block util 
Lock.Unlock() that they can do the above logicals with next time or in 
future(logical may changes some variables and those variables' change could 
be see with latency). That looks like a Trylock() implemetion.
I browsed the discussion 
https://groups.google.com/forum/#!searchin/golang-nuts/trylock%7Csort:relevance/golang-nuts/MTaJNZ49u60/ycc7UHgjLwgJ
  
<https://groups.google.com/forum/#!searchin/golang-nuts/trylock%7Csort:relevance/golang-nuts/MTaJNZ49u60/ycc7UHgjLwgJ>and
 
guess Trylock() may the best way ...

var lock sync.Mutex

func change(vvv int) bool {
     if lock.Trylock() {
          // execute codes if we trylock successfully
          bla bla.......
          usage := vvv .......
          bla bla.......

          return true
     } else { 
          // someone is locking the resource. we skip the 
          // change(vvvv) call. and take a chance in next
          // time. the context of this method we can drop
          // directly
        
          return false
     }
}

routines := 16

for ;routines != 0; routines-- {
    go func() {
        // infinite loop 
        var i = 0
        for {
            // discard the return value of change()
            change(i)
            i++
        }
    }()
}

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