仅使用原子实现以下代码:
const Max = 8
var index int
func add() int {
index++
if index >= Max {
index = 0
}
return index
}
Run Code Online (Sandbox Code Playgroud)
例如:
func add() int {
atomic.AddUint32(&index, 1)
// error: race condition
atomic.CompareAndSwapUint32(&index, Max, 0)
return index
}
Run Code Online (Sandbox Code Playgroud)
但这是错误的。有一个竞争条件。可以实现不使用锁吗?
我有两个切片或向量,我想添加它们,如Golang所示:
a := []byte{1, 2, 3}
b := []byte{4, 5, 6}
ab := append(a, b...)
ba := append(b, a...)
Run Code Online (Sandbox Code Playgroud)
我怎么能在Rust那样做呢?我发现了一些其他问题,例如:
但是,他们所有的最佳答案都是a += b,而不是ab = a + b.
let mut a = vec![1, 2, 3];
let mut b = vec![4, 5, 6];
a.append(&mut b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, []);
Run Code Online (Sandbox Code Playgroud)
或者是否有类似Vec::append(a, b)Rust 的功能?