On Tue, Oct 11, 2016 at 7:26 PM,  <[email protected]> wrote:
> Hi, there. I've read the FAQ and specifically the concurrency part. Tell me
> if the problem has been discussed anywhere.
>
> I used an infinite loop to block a goroutine until a value is big enough:
>
> for commitIndex < index {}
>
> I know its bad but its just a very intuitive and fast to implement. And I
> incremented commitIndex in another goroutine monotonically:
>
> for {
>     select {
>     case <-ch:
>       mu.Lock()
>       commitIndex++
>       mu.Unlock()
>     }
> }
>
> These are the only two places that access commitIndex. I didn't acquire the
> lock when reading commitIndex since I think its OK to read a stale value in
> my case. The program is a complex Raft replicated server so there're many
> other goroutines. The problem is the program became stuck after running for
> a while. commitIndex stopped updating and even the Raft servers stopped
> communicating with each other. I ended up adding a Sleep() in the for loop
> and everything worked. Is this normal? Or there's a problem with the
> goroutine scheduling?

That is normal.  Do not write code this way.  Do not omit required locks.

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

Reply via email to