我感到困惑的時候,有必要寫一個新的作品時要考慮線程安全的問題時。TensorFlow:類成員的線程安全添加新的運算
在TensorFlow的How-to add a new op guide,我閱讀下面的句子,提醒用戶添加一個互斥體,防止數據競爭。
重要注意事項:您的OpKernel的實例可以同時訪問。您的計算方法必須是線程安全的。保護任何 訪問具有互斥鎖的類成員(或者更好的是,不要通過類成員共享狀態 !考慮使用ResourceMgr來跟蹤Op 狀態)。
然而,在同一網頁的後跟文本約how to add attr to op,我發現類成員int preserve_index_;
不互斥在給定的代碼片段保護:
class ZeroOutOp : public OpKernel {
public:
explicit ZeroOutOp(OpKernelConstruction* context) : OpKernel(context) {
// Get the index of the value to preserve
OP_REQUIRES_OK(context,
context->GetAttr("preserve_index", &preserve_index_));
// Check that preserve_index is positive
OP_REQUIRES(context, preserve_index_ >= 0,
errors::InvalidArgument("Need preserve_index >= 0, got ",
preserve_index_));
}
void Compute(OpKernelContext* context) override {
// ...
}
private:
int preserve_index_;
};
那麼,有沒有任何隱含的機制在TensorFlow中保護名爲「preserve_index_」的變量不受數據競爭的影響?如果是,請告訴我相應代碼的位置,以確保此變量的線程安全?
在此先感謝!
注意!多謝! :) –