tg_task_manage/
id.rs

1use core::sync::atomic::{AtomicUsize, Ordering};
2
3/// 进程 Id
4#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
5pub struct ProcId(usize);
6
7impl ProcId {
8    ///
9    pub fn new() -> Self {
10        // 任务编号计数器,任务编号自增
11        static PID_COUNTER: AtomicUsize = AtomicUsize::new(0);
12        let id = PID_COUNTER.fetch_add(1, Ordering::Relaxed);
13        Self(id)
14    }
15    ///
16    pub fn from_usize(v: usize) -> Self {
17        Self(v)
18    }
19    ///
20    pub fn get_usize(&self) -> usize {
21        self.0
22    }
23}
24
25/// 线程 Id
26#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
27pub struct ThreadId(usize);
28
29impl ThreadId {
30    ///
31    pub fn new() -> Self {
32        // 任务编号计数器,任务编号自增
33        static TID_COUNTER: AtomicUsize = AtomicUsize::new(0);
34        let id = TID_COUNTER.fetch_add(1, Ordering::Relaxed);
35        Self(id)
36    }
37    ///
38    pub fn from_usize(v: usize) -> Self {
39        Self(v)
40    }
41    ///
42    pub fn get_usize(&self) -> usize {
43        self.0
44    }
45}
46
47/// 协程 Id
48#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
49pub struct CoroId(usize);
50
51impl CoroId {
52    ///
53    pub fn new() -> Self {
54        // 任务编号计数器,任务编号自增
55        static CID_COUNTER: AtomicUsize = AtomicUsize::new(0);
56        let id = CID_COUNTER.fetch_add(1, Ordering::Relaxed);
57        Self(id)
58    }
59    ///
60    pub fn from_usize(v: usize) -> Self {
61        Self(v)
62    }
63    ///
64    pub fn get_usize(&self) -> usize {
65        self.0
66    }
67}