Your code seems substantially different than the Java implementation. For instance, in your tryOptimisticRead(), you take a lock - the Java version has no locking in that method (on a volatile, aka atomic read) - although I am not sure why you are taking the lock.
func (sl *StampedLock) TryOptimisticRead() uint64 { stamp := atomic.LoadUint64(&sl.stamp) if sl.mu.TryLock() { sl.mu.Unlock() return stamp } return stamp } // Java - state is a “volatile” integer public long tryOptimisticRead() { long s; return (((s = state) & WBIT) == 0L) ? (s & SBITS) : 0L; } > On Jan 31, 2025, at 10:51 AM, Bruno Albuquerque <b...@gmail.com> wrote: > > Ops. There was a bug due to left over of me testing. Here is a fixed version: > > https://go.dev/play/p/UuIWVlV0UTN > > Also, don't try to run in the playground as this runs forever (it could be > changed but I am lazy). > > -Bruno > > > On Fri, Jan 31, 2025 at 11:31 AM Bruno Albuquerque <b...@gmail.com > <mailto:b...@gmail.com>> wrote: >> This seemed expected to me but I went ahead and created a Go implementation >> (which might not be 100% correct so take it for what it will) and I was >> surprised that the race detector did not really complain about anything. >> >> https://go.dev/play/p/R1alMCc-xN9 >> >> -Bruno >> >> >> On Fri, Jan 31, 2025, 6:13 AM Robert Engels <reng...@ix.netcom.com >> <mailto:reng...@ix.netcom.com>> wrote: >>> Hi, >>> >>> Do you think it is possible to implement a stamped lock in Go >>> https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/StampedLock.html >>> ? >>> >>> It would seem that the Go race detector would always report the “optimistic >>> read” mode as a data race? >>> >>> (The docs state for Java that the values can be wildly inconsistent when >>> the optimistic read fails). >>> >>> Ideas on how to implement in Go? >>> >>> -- >>> 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 >>> <mailto:golang-nuts+unsubscr...@googlegroups.com>. >>> To view this discussion visit >>> https://groups.google.com/d/msgid/golang-nuts/FBEB055A-2B84-4738-AE22-C22ABAC8C4A9%40ix.netcom.com >>> >>> <https://groups.google.com/d/msgid/golang-nuts/FBEB055A-2B84-4738-AE22-C22ABAC8C4A9%40ix.netcom.com?utm_medium=email&utm_source=footer>. > > > -- > 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 > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion visit > https://groups.google.com/d/msgid/golang-nuts/CAEd86TwQ_HzVt_H3rA84PWb1jdt%2BJBjQoD2Pq4VPDCVbS7d1yg%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CAEd86TwQ_HzVt_H3rA84PWb1jdt%2BJBjQoD2Pq4VPDCVbS7d1yg%40mail.gmail.com?utm_medium=email&utm_source=footer>. -- 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. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/F2F5DC00-83AE-4BC6-85FD-04D23C1FFF74%40ix.netcom.com.