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.

Reply via email to