Comments (3)
我也认为需要循环调用,如果是订单数量累计的话,其他groutinue也在进行原子性操作的话,其实v期望的数是不对的,那么就需要循环重新去全局变量里面value的值,重新compare and swap.
from interview-go.
答案意思是不是要说应该用atomic.AddInt32()
from interview-go.
这段代码在语法上是正确的,并且其逻辑也是可以正确执行的。它利用了 Go 语言的 atomic
包中提供的 CompareAndSwapInt32
函数,来达到原子性地更新 value
变量的效果。
SetValue
函数定义了以下过程:
-
在一个无限循环内读取全局变量
value
到局部变量v
。 -
使用
CompareAndSwapInt32
函数尝试原子性地将value
从v
更新为v + delta
。- 如果
value
仍等于v
(没有其他协程已经修改了value
),则更新value
并退出循环。 - 如果
value
已经不等于v
(其他协程已经修改了value
),则循环重试整个过程。
- 如果
SetValue
函数的目的是确保在多个协程可能同时尝试更新 value
的情况下,始终能够正确地增加 delta
到 value
上。atomic.CompareAndSwapInt32
的原子操作保证了同一时间只有一个操作可以成功地改变 value
。
这样的代码通常用于无锁编程模式,在高并发的情境中需要确保变量的更改操作不会互相干扰时,这种方式是非常有用的。
然而,需要注意的是,虽然这种方法提供了一种无锁更新共享变量的方式,但它也可能会导致高竞争的情况下出现活锁问题。这是因为在高度竞争的环境下,SetValue
函数可能会不断失败并重试。因此,这种方式最适用于更新冲突不是很频繁发生的场景中。
from interview-go.
Related Issues (20)
- 实现 Sunday 匹配 精简版代码
- 第三题的答案是否使用了额外的空间 HOT 1
- gpm窃取过程不对 HOT 1
- 一些建议 HOT 4
- 语法找错题 最后一道解答错误
- question17/多协程切片查询
- 最长公共前缀 go版本代码有误
- 第六题机器人坐标计算有问题
- 冒泡排序完全是错的 HOT 1
- “实现阻塞读且并发安全的map”答案补充 HOT 1
- q001中的chan类型应该用struct{}
- 实现 Sunday 匹配 needle在最末尾的时候返回结果异常
- 读阻塞且并发安全的 Map,答案是否有问题?
- 最接近的三数之和,代码有误
- Goroutine泄露问题——交替打印数字和字母
- q006 机器人坐标,L 跟 R指令是不是调转了
- 判断字符串中字符是否全都不同为什么有个127的判断?
- 『goroutine和channel使用一』 答案协程泄露
- interview-go/question /q015.md
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from interview-go.