MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / TestThreadRun

Function TestThreadRun

serving/processor/storage/feature_store_test.cc:35–103  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33static bool global_queue_result[NUM1];
34
35void TestThreadRun(AsyncFeatureStoreMgr* mgr, int idx,
36 bool is_update_thread) {
37 std::mutex* mu = nullptr;
38 std::condition_variable* cv = nullptr;
39
40 sparse_task_queue* queue = nullptr;
41 if (is_update_thread) {
42 mu = mgr->GetUpdateMutex(idx);
43 cv = mgr->GetUpdateCV(idx);
44 queue = mgr->GetUpdateSparseTaskQueue(idx);
45 } else {
46 mu = mgr->GetMutex(idx);
47 cv = mgr->GetCV(idx);
48 queue = mgr->GetSparseTaskQueue(idx);
49 }
50
51 const int try_count = 64;
52 int curr_try_count = 0;
53 SparseTask* task = nullptr;
54 bool succeeded = false;
55
56 while ((succeeded = queue->try_dequeue(task)) ||
57 !mgr->ShouldStop()) {
58 if (!succeeded) {
59 ++curr_try_count;
60 if (curr_try_count <= try_count) {
61 continue;
62 }
63 curr_try_count = 0;
64
65 if (is_update_thread) {
66 *(mgr->GetUpdateSleepingFlag(idx)) = true;
67 *(mgr->GetUpdateReadyFlag(idx)) = false;
68 } else {
69 *(mgr->GetSleepingFlag(idx)) = true;
70 *(mgr->GetReadyFlag(idx)) = false;
71 }
72
73 {
74 // try to wait signal when have no elements in the queue
75 std::unique_lock<std::mutex> lock(*mu);
76 cv->wait(lock, [is_update_thread, mgr, idx] {
77 return (is_update_thread ?
78 *(mgr->GetUpdateReadyFlag(idx)) :
79 *(mgr->GetReadyFlag(idx))) ||
80 mgr->ShouldStop();
81 });
82 lock.unlock();
83 }
84
85 if (is_update_thread) {
86 *(mgr->GetUpdateSleepingFlag(idx)) = false;
87 } else {
88 *(mgr->GetSleepingFlag(idx)) = false;
89 }
90
91 continue;
92 }

Callers

nothing calls this directly

Calls 13

GetUpdateMutexMethod · 0.80
GetUpdateCVMethod · 0.80
GetMutexMethod · 0.80
GetCVMethod · 0.80
GetSparseTaskQueueMethod · 0.80
GetUpdateSleepingFlagMethod · 0.80
GetUpdateReadyFlagMethod · 0.80
GetSleepingFlagMethod · 0.80
GetReadyFlagMethod · 0.80
ShouldStopMethod · 0.45
waitMethod · 0.45

Tested by

no test coverage detected