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 <[email protected]> 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 <[email protected]
> <mailto:[email protected]>> 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 <[email protected]
>> <mailto:[email protected]>> 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 [email protected]
>>> <mailto:[email protected]>.
>>> 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 [email protected]
> <mailto:[email protected]>.
> 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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/F2F5DC00-83AE-4BC6-85FD-04D23C1FFF74%40ix.netcom.com.