草庐IT

用于查找竞争条件/死锁的 C#/.NET 分析工具

是否有分析.NET代码并发现竞争条件的工具?我有一些代码具有获取或创建私有(private)静态字段的公共(public)静态属性。它还具有一个公共(public)静态方法,可将此字段设置为null(...是的,我知道!...)由于这两种方法都没有锁定,所以可以肯定的是,将来事情会变得非常糟糕。我需要一个工具来递归地检查调用这些方法中的任何一个的东西,并查看是否在另一个线程上产生了任何东西。我正在寻找一个工具或者一个nDependSQL脚本(如果可能的话)。 最佳答案 您可能正在寻找其中之一:CHESSTypemockRacer注意

javascript - 使用 Redux 获取数据时如何避免竞争条件?

我们有一个异步获取对象的操作,我们称它为getPostDetails,它采用一个参数来获取要获取的帖子一个身份证。用户会看到一个帖子列表,可以单击其中一个以获取一些详细信息。如果用户点击“Post#1”,我们会发送一个GET_POST操作,它可能看起来像这样。constgetPostDetails=(id)=>({type:c.GET_POST_DETAILS,promise:(http)=>http.get(`http://example.com/posts/#${id}`),returnKey:'facebookData'})这是由一个中间件拾取的,它将一个成功处理程序添加到pro

go - 是什么导致了这种数据竞争?

为什么这段代码会导致数据竞争?我已经使用了原子添加。packagemainimport("sync/atomic""time")varaint64funcmain(){for{ifa我用这段代码运行命令gorun--race并得到:==================WARNING:DATARACEWriteat0x000001150f30bygoroutine8:sync/atomic.AddInt64()/usr/local/Cellar/go/1.11.2/libexec/src/runtime/race_amd64.s:276+0xbmain.run()/Users/flask

go - mutex 的 golang 实现中是否存在竞争条件 m.state 是在没有原子函数的情况下读取的

在golang中,如果两个goroutines读写一个没有互斥量和原子性的变量,可能会带来数据竞争。使用命令gorun--racexxx.go将检测比赛点。在src/sync/mutex.go中实现Mutex时使用如下代码func(m*Mutex)Lock(){//Fastpath:grabunlockedmutex.ifatomic.CompareAndSwapInt32(&m.state,0,mutexLocked){ifrace.Enabled{race.Acquire(unsafe.Pointer(m))}return}varwaitStartTimeint64starving

go - println 和 fmt.Println 的竞争检测器输出不同

我无法解释竞争检测器中println和fmt.Println的不同输出。我希望两者都是种族,或者至少两者都不是种族。packagemainvaraintfuncf(){a=1}funcmain(){gof()println(a)}并且,它会按预期找到竞争条件。0==================WARNING:DATARACEWritebygoroutine5:main.f()/home/felmas/test.go:6+0x30Previousreadbymaingoroutine:main.main()/home/felmas/test.go:11+0x4dGoroutine5(

http - 更改处理程序时 http 测试服务器中的竞争条件

我有一部分测试,我想在httptest.Server的一个实例上运行它们。每个测试都有自己的处理函数。funcTestAPICaller_RunApiMethod(t*testing.T){server:=httptest.NewServer(http.HandlerFunc(nil))deferserver.Close()for_,test:=rangetestData{server.Config.Handler=http.HandlerFunc(test.handler)t.Run(test.Name,func(t*testing.T){...somecodewhichcallss

go - 在 go 中延迟互斥锁解锁时,您会遇到数据竞争吗?

这个Get方法是否有问题并且容易出现理论上的数据竞争?typeitemstruct{valintmutexsync.RWMutex}func(i*item)Set(valint){i.mutex.Lock()deferi.mutex.Unlock()i.val=val}func(i*item)Get()int{i.mutex.RLock()deferi.mutex.RUnlock()returni.val}我问是因为我在使用-race和以前的代码运行测试时看到了罕见的数据竞争,但找不到任何方法来复制这种效果。在defer执行RUnlock和我们从结构中读取并返回值之间,是否可以将i.v

go - 具有 WaitGroup 和无缓冲 channel 的竞争条件

在这篇文章中得到我最初问题的(正确)解决方案后Understandinggolangchannels:deadlock,我想出了一个稍微不同的解决方案(在我看来读起来更好://Binaryhistogramcountstheoccurencesofeachword.packagemainimport("fmt""strings""sync")vardata=[]string{"Theyellowfishswimsslowlyinthewater","Thebrowndogbarksloudlyafteradrink...","Thedarkbirdbirdofpreylandsonas

multithreading - 为什么竞争检测器没有检测到这种竞争条件?

我目前正在学习Go编程语言,并且正在试验atomic包。在这个例子中,我生成了一些Goroutine,它们都需要增加一个包级变量。有几种方法可以避免竞争条件,但现在我想使用atomic包来解决这个问题。在我的WindowsPC上运行以下代码时(gorunmain.go)结果不是我期望的结果(我预计最终结果是1000)。最终数字介于900和1000之间。在GoPlayground中运行代码时,该值为1000。这是我使用的代码:https://play.golang.org/p/8gW-AsKGzwqvarcounterint64varwgsync.WaitGroupfuncmain(){

go - 如何在受互斥锁保护的结构中找到数据竞争?

我有一个包含映射的结构,该映射可从受互斥锁保护的不同goroutine访问:typeReadingsstruct{sync.MutexTimestamptime.Timevaluesmap[meters.Measurement]float64}不过,它在Add(写入)和MarshalJSON(读取)之间存在数据竞争。后者进行结构转换:func(r*Readings)Add(qQuerySnip){r.Lock()deferr.Unlock()r.Timestamp=q.Timestampifr.values==nil{r.values=make(map[meters.Measureme