如何为对象ID创建原子计数器? [重复]

问题描述 投票:-2回答:1

我正在为我的数据库实现一个事务处理系统,在该数据库中,我希望事务处理ID在初始化时增加1:

pub struct Transaction {
    id: i32,
}

impl Transaction {
    fn new() -> Transaction {

    }
}

assert_eq!(1, Transaction::new().id)
assert_eq!(2, Transaction::new().id)

这可以由Java中的static AtomicLong实现。

rust atomic
1个回答
-1
投票
对于所有整数类型,在std::sync::atomic模块中定义了相似的原子类型。对于您的摘要,您可以选择AtomicI32

AtomicI32

我也建议您查看use std::sync::atomic::{AtomicI32, Ordering};

pub struct Transaction {
    id: AtomicI32,
}

let transaction = Transaction {
    id: AtomicI32::new(1),
};

assert_eq!(1, transaction.id.fetch_add(1, Ordering::Relaxed));
assert_eq!(2, transaction.id.load(Ordering::Relaxed));
© www.soinside.com 2019 - 2024. All rights reserved.