Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d2a958f4
R
Rust
项目概览
int
/
Rust
接近 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d2a958f4
编写于
3月 22, 2019
作者:
M
Mazdak Farrokhzad
提交者:
GitHub
3月 22, 2019
浏览文件
操作
浏览文件
下载
差异文件
Rollup merge of #59291 - SimonSapin:nonzero-thread-id, r=alexcrichton
Make Option<ThreadId> no larger than ThreadId, with NonZeroU64
上级
28644cd9
c1d9191f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
11 addition
and
4 deletion
+11
-4
src/libstd/thread/mod.rs
src/libstd/thread/mod.rs
+11
-4
未找到文件。
src/libstd/thread/mod.rs
浏览文件 @
d2a958f4
...
...
@@ -163,6 +163,7 @@
use
crate
::
fmt
;
use
crate
::
io
;
use
crate
::
mem
;
use
crate
::
num
::
NonZeroU64
;
use
crate
::
panic
;
use
crate
::
panicking
;
use
crate
::
str
;
...
...
@@ -1036,7 +1037,7 @@ pub fn park_timeout(dur: Duration) {
/// [`Thread`]: ../../std/thread/struct.Thread.html
#[stable(feature
=
"thread_id"
,
since
=
"1.19.0"
)]
#[derive(Eq,
PartialEq,
Clone,
Copy,
Hash,
Debug)]
pub
struct
ThreadId
(
u
64
);
pub
struct
ThreadId
(
NonZeroU
64
);
impl
ThreadId
{
// Generate a new unique thread ID.
...
...
@@ -1044,7 +1045,7 @@ fn new() -> ThreadId {
// We never call `GUARD.init()`, so it is UB to attempt to
// acquire this mutex reentrantly!
static
GUARD
:
mutex
::
Mutex
=
mutex
::
Mutex
::
new
();
static
mut
COUNTER
:
u64
=
0
;
static
mut
COUNTER
:
u64
=
1
;
unsafe
{
let
_
guard
=
GUARD
.lock
();
...
...
@@ -1058,7 +1059,7 @@ fn new() -> ThreadId {
let
id
=
COUNTER
;
COUNTER
+=
1
;
ThreadId
(
id
)
ThreadId
(
NonZeroU64
::
new
(
id
)
.unwrap
()
)
}
}
}
...
...
@@ -1484,9 +1485,10 @@ fn _assert_both<T: Send + Sync>() {}
mod
tests
{
use
super
::
Builder
;
use
crate
::
any
::
Any
;
use
crate
::
mem
;
use
crate
::
sync
::
mpsc
::{
channel
,
Sender
};
use
crate
::
result
;
use
crate
::
thread
;
use
crate
::
thread
::{
self
,
ThreadId
}
;
use
crate
::
time
::
Duration
;
use
crate
::
u32
;
...
...
@@ -1716,6 +1718,11 @@ fn sleep_ms_smoke() {
thread
::
sleep
(
Duration
::
from_millis
(
2
));
}
#[test]
fn
test_size_of_option_thread_id
()
{
assert_eq!
(
mem
::
size_of
::
<
Option
<
ThreadId
>>
(),
mem
::
size_of
::
<
ThreadId
>
());
}
#[test]
fn
test_thread_id_equal
()
{
assert
!
(
thread
::
current
()
.id
()
==
thread
::
current
()
.id
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录