Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_38905368
tensorflow
提交
98dc8b9a
T
tensorflow
项目概览
qq_38905368
/
tensorflow
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
tensorflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
98dc8b9a
编写于
3月 28, 2016
作者:
D
David G. Andersen
提交者:
TensorFlower Gardener
3月 28, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add memory fences to ensure that the reader's deliberate racy use of
is_initialized is safe. Change: 118405243
上级
785fa7a3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
12 addition
and
1 deletion
+12
-1
tensorflow/core/kernels/initializable_lookup_table.cc
tensorflow/core/kernels/initializable_lookup_table.cc
+7
-0
tensorflow/core/kernels/lookup_table_op.cc
tensorflow/core/kernels/lookup_table_op.cc
+5
-1
未找到文件。
tensorflow/core/kernels/initializable_lookup_table.cc
浏览文件 @
98dc8b9a
...
...
@@ -25,6 +25,9 @@ Status InitializableLookupTable::Find(const Tensor& keys, Tensor* values,
if
(
!
is_initialized
())
{
return
errors
::
FailedPrecondition
(
"Table not initialized."
);
}
// Do not let the use migrate before the check; table is used without
// a lock by the readers.
std
::
atomic_thread_fence
(
std
::
memory_order_acquire
);
TF_RETURN_IF_ERROR
(
CheckFindArguments
(
keys
,
*
values
,
default_value
));
return
DoFind
(
keys
,
values
,
default_value
);
}
...
...
@@ -48,6 +51,10 @@ Status InitializableLookupTable::Initialize(InitTableIterator& iter) {
if
(
!
errors
::
IsOutOfRange
(
iter
.
status
()))
{
return
iter
.
status
();
}
// Prevent compiler/memory reordering of is_initialized and
// the initialization itself.
std
::
atomic_thread_fence
(
std
::
memory_order_release
);
is_initialized_
=
true
;
return
Status
::
OK
();
}
...
...
tensorflow/core/kernels/lookup_table_op.cc
浏览文件 @
98dc8b9a
...
...
@@ -69,7 +69,11 @@ class HashTable : public InitializableLookupTable {
public:
size_t
size
()
const
override
{
// return the size of the table only if it's initialized, otherwise 0.
return
table_
&&
is_initialized_
?
table_
->
size
()
:
0
;
if
(
!
is_initialized_
)
{
return
0
;
}
std
::
atomic_thread_fence
(
std
::
memory_order_acquire
);
return
table_
?
table_
->
size
()
:
0
;
}
DataType
key_dtype
()
const
override
{
return
DataTypeToEnum
<
K
>::
v
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录