Since we are on the topic, may be interesting to someone:

https://dfava.github.io/papers/fava2020finding.pdf

https://dfava.github.io/thesis/dfava_thesis.pdf

I’m not so sure I agree with you saying “ whatever the current implementation 
behavior is”

Daniel

> On Feb 9, 2022, at 3:45 PM, Robert Engels <reng...@ix.netcom.com> wrote:
> 
> 
> See issue 5045
> 
>>> On Feb 9, 2022, at 8:42 AM, Robert Engels <reng...@ix.netcom.com> wrote:
>>> 
>> 
>> The problem with this reasoning is that Go still does not have an explicit 
>> memory model with respect to happens before relationships - falling back on 
>> “whatever the current implementation behavior is”. This makes it more likely 
>> that any change in the compiler will need to continue to support the benign 
>> data races. 
>> 
>>>> On Feb 9, 2022, at 8:25 AM, peterGo <go.peter...@gmail.com> wrote:
>>>> 
>>> 
>>> Pelen Li,
>>> 
>>> Boehm covers your specific case: "there is no reason to believe that a 
>>> currently working program with “benign races” will continue to work when it 
>>> is recompiled. Perhaps most surprisingly, this includes even the case of 
>>> potentially concurrent writes of the same value by different threads."
>>> 
>>> Peter
>>> 
>>>> On Wed, Feb 9, 2022 at 9:17 AM peterGo <go.peter...@gmail.com> wrote:
>>>> Pelen Li,
>>>> 
>>>> Always fix your data races. You should consider the results of data races 
>>>> as undefined.
>>>> 
>>>> Dmitry Vyukov, who implemented the Go race detector, once wrote an 
>>>> interesting article with the title: "Benign data races: what could 
>>>> possibly go wrong?" 
>>>> 
>>>> https://twitter.com/dvyukov/status/288858957827682304
>>>> 
>>>> The Go Blog: Introducing the Go Race Detector
>>>> Dmitry Vyukov and Andrew Gerrand
>>>> 26 June 2013
>>>> 
>>>> https://go.dev/blog/race-detector
>>>> 
>>>> Hans-J. Boehm wrote: "there is no reason to believe that a currently 
>>>> working program with “benign races” will continue to work when it is 
>>>> recompiled."
>>>> 
>>>> How to miscompile programs with “benign” data races
>>>> Hans-J. Boehm
>>>> HP Laboratories
>>>> 
>>>> https://www.usenix.org/legacy/event/hotpar11/tech/final_files/Boehm.pdf
>>>> 
>>>> Nonetheless many programmers clearly believe, along with [15] that certain 
>>>> kinds of data races can be safely ignored in practice because they will 
>>>> produce expected results with all reasonable implementations. Here we show 
>>>> that all kinds of C or C++ source-level “benign” races discussed in the 
>>>> literature can in fact lead to incorrect execution as a result of 
>>>> perfectly reasonable compiler transformations, or when the program is 
>>>> moved to a different hardware platform. Thus there is no reason to believe 
>>>> that a currently working program with “benign races” will continue to work 
>>>> when it is recompiled. Perhaps most surprisingly, this includes even the 
>>>> case of potentially concurrent writes of the same value by different 
>>>> threads.
>>>> 
>>>> And so on.
>>>> 
>>>> Peter
>>>> 
>>>>> On Wednesday, February 9, 2022 at 3:21:26 AM UTC-5 penglo...@gmail.com 
>>>>> wrote:
>>>>> I want to set a value with the index of the slice. I don't really care if 
>>>>> there are multiple goroutines cover the value with each other, because 
>>>>> the value is same.
>>>>> 
>>>>> Can i just ignore this DataRace Warning? I don't know if this will cause 
>>>>> panic.
>>>>> 
>>>>> Here's my example:
>>>>> I defined a structure with slice, and a Add() function for it. sample 
>>>>> like this:
>>>>> ```go
>>>>> package test_slice
>>>>> 
>>>>> type SliceObj struct {
>>>>>     set []uint
>>>>> }
>>>>> 
>>>>> func New(length int64) *SliceObj {
>>>>>     return &SliceObj{
>>>>>         set: make([]uint, length),
>>>>>     }
>>>>> }
>>>>> 
>>>>> func (b *SliceObj) Add(i uint) {
>>>>>     b.set[i] = i
>>>>> }
>>>>> ```
>>>>> 
>>>>> And then i make a main file to test it, like this:
>>>>> ```go
>>>>> package main
>>>>> 
>>>>> import (
>>>>>     "time"
>>>>> 
>>>>>     "test_slice"
>>>>> )
>>>>> 
>>>>> func main() {
>>>>>     s := test_slice.New(1000000)
>>>>>     go func() {
>>>>>         s.Add(10)
>>>>>     }()
>>>>>     s.Add(10)
>>>>> 
>>>>>     time.Sleep(3 * time.Second)
>>>>> }
>>>>> ```
>>>>> 
>>>>> And data race is detected:
>>>>> (I know the reason of this warning, but I don't know if I can ignore it)
>>>>> ==================
>>>>> WARNING: DATA RACE
>>>>> Write at 0x00c000180050 by goroutine 18:
>>>>>   test_slice.(*SliceObj).Add()
>>>>>       test_slice.go:27 +0x68
>>>>>   main.main.func1()
>>>>>       test.go:25 +0x36
>>>>> 
>>>>> Previous write at 0x00c000180050 by main goroutine:
>>>>>   test_slice.(*SliceObj).Add()
>>>>>       test_slice.go:27 +0xfd
>>>>>   main.main()
>>>>>       test.go:27 +0xcb
>>>>> 
>>>>> Goroutine 18 (running) created at:
>>>>>   main.main()
>>>>>       test.go:24 +0xca
>>>>> ==================
>>>>> Found 1 data race(s)
>>>>> exit status 66
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to a topic in the 
>>>> Google Groups "golang-nuts" group.
>>>> To unsubscribe from this topic, visit 
>>>> https://groups.google.com/d/topic/golang-nuts/ai0eQtnas7A/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to 
>>>> golang-nuts+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/golang-nuts/2594a018-872a-4d54-8ede-c769042e99b5n%40googlegroups.com.
>>> 
>>> -- 
>>> 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 on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/CAOBWp8do4njo%2B56hb7PJ-4RdXxV%2B0KGUVwv9zRC%3Dgd3bm%2BSM_g%40mail.gmail.com.
> -- 
> 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 on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/78D7693F-198F-4CDE-BEBE-C296D77111F3%40ix.netcom.com.

-- 
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 on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CF1981EE-3A3F-4CEF-AFA2-C5248F89B07F%40gmail.com.

Reply via email to