diff --git a/oneflow/core/job/improver.cpp b/oneflow/core/job/improver.cpp
index fa7f00eaaba4ff10a17bc2b3df82116d0121e523..e9a1233291fd74f330f8a5ad65b2459e610f8d81 100644
--- a/oneflow/core/job/improver.cpp
+++ b/oneflow/core/job/improver.cpp
@@ -170,8 +170,21 @@ std::function<const HashMap<int64_t, double>&(int64_t)> MakeGetterPathIIScales4R
   };
 }
 
+std::function<void(const std::list<int64_t>&)> MakeSetterAddCtrlRegst(Plan* plan) { TODO(); }
+
+void ForEachMemSharingCriticalSection(
+    const Plan& plan, const std::function<void(const std::list<int64_t>&)>& Handler) {
+  TODO();
+}
+
 }  // namespace
 
+Plan Improver::AddCtrlRegstForMemSharingCriticalSection(const Plan& plan) const {
+  Plan ret(plan);
+  ForEachMemSharingCriticalSection(plan, MakeSetterAddCtrlRegst(&ret));
+  return ret;
+}
+
 uint64_t Improver::AvailableMemSize(int64_t machine_id, int64_t memory_zone_id) const {
   int64_t mem_size = amd_.machine_amd(machine_id).zone_size(memory_zone_id);
   JobDesc* job_desc = Global<JobDesc>::Get();
diff --git a/oneflow/core/job/improver.h b/oneflow/core/job/improver.h
index 13dec455cb554483951ec5aff27ef82e3585ae15..987c0cd24108e81dd9cf42e027eee2a8f5b52ff6 100644
--- a/oneflow/core/job/improver.h
+++ b/oneflow/core/job/improver.h
@@ -42,6 +42,7 @@ class Improver final {
   double CalcMaxRegstDescDuration(
       const std::function<const HashMap<int64_t, double>&(int64_t)>& Duration4RegstDescId,
       const MemZoneRegstDescs& mz_regst_descs) const;
+  Plan AddCtrlRegstForMemSharingCriticalSection(const Plan&) const;
 
   AvailableMemDesc amd_;
   std::vector<int32_t> record_load_task_num_;