小编wll*_*nyj的帖子

如何在 Go 中实现仅使用原子的“i++ and i>=max ? 0: i”

仅使用原子实现以下代码:

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)

但这是错误的。有一个竞争条件。可以实现不使用锁吗?

cas locking atomic go

3
推荐指数
1
解决办法
1774
查看次数

如何连接两个切片或两个向量,仍然可以访问原始值?

我有两个切片或向量,我想添加它们,如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 的功能?

vector append slice rust

-1
推荐指数
2
解决办法
524
查看次数

标签 统计

append ×1

atomic ×1

cas ×1

go ×1

locking ×1

rust ×1

slice ×1

vector ×1