教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang多goroutine读取map的不同key是否会有data race

golang多goroutine读取map的不同key是否会有data race

发布时间:2022-02-01   编辑:jiaochengji.com
教程集为您提供golang多goroutine读取map的不同key是否会有data race等资源,欢迎您收藏本站,我们将为您提供最新的golang多goroutine读取map的不同key是否会有data race资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h3>代码</h3> <pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token string">"sync"</span> <span class="token punctuation">)</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> m <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">const</span> cyclesCount <span class="token operator">=</span> <span class="token number">10</span> <span class="token keyword">var</span> wg sync<span class="token punctuation">.</span>WaitGroup wg<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">go</span> <span class="token keyword">func</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">defer</span> wg<span class="token punctuation">.</span><span class="token function">Done</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> cyclesCount<span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> m<span class="token punctuation">[</span><span class="token string">`foo1`</span><span class="token punctuation">]</span><span class="token operator"> </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">go</span> <span class="token keyword">func</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">defer</span> wg<span class="token punctuation">.</span><span class="token function">Done</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> cyclesCount<span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> m<span class="token punctuation">[</span><span class="token string">`foo`</span><span class="token punctuation">]</span><span class="token operator"> </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">(</span><span class="token punctuation">)</span> wg<span class="token punctuation">.</span><span class="token function">Wait</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>m<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <h4>结果</h4> <ul><li>有时候会报<code>fatal error: concurrent map writes</code>,有时候可以顺利通过,结果还是正确的</li><li>如果把cyclesCount 调成1,大概率是可以顺利通过,并且结果还是正确的</li></ul><h4>结论</h4>

还是有datarace的

到此这篇关于“golang多goroutine读取map的不同key是否会有data race”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang多goroutine读取map的不同key是否会有data race
golang:map
Golang的map并发安全
golang map key 正则表达_在GoLang中实现线程安全的字典
golang数据竞态
Goroutine 的同步(第三部分)
Golang map 并发读写问题源码分析
golang key map 所有_golang系列——高级语法之map
golang chan 关闭时的原则
Golang从入门到放弃200618--Map(1)Map的初始化和基本操作

[关闭]
~ ~