@@ -25,9 +25,9 @@ class UWorkStealingQueue : public UQueueObject {
2525 */
2626 CVoid push (T&& value) {
2727 while (true ) {
28- if (lock_ .try_lock ()) {
28+ if (mutex_ .try_lock ()) {
2929 deque_.emplace_back (std::forward<T>(value));
30- lock_ .unlock ();
30+ mutex_ .unlock ();
3131 break ;
3232 } else {
3333 std::this_thread::yield ();
@@ -43,9 +43,9 @@ class UWorkStealingQueue : public UQueueObject {
4343 */
4444 CBool tryPush (T&& value) {
4545 CBool result = false ;
46- if (lock_ .try_lock ()) {
46+ if (mutex_ .try_lock ()) {
4747 deque_.emplace_back (std::forward<T>(value));
48- lock_ .unlock ();
48+ mutex_ .unlock ();
4949 result = true ;
5050 }
5151 return result;
@@ -56,13 +56,13 @@ class UWorkStealingQueue : public UQueueObject {
5656 * 向队列中写入信息
5757 * @param values
5858 */
59- CVoid push (std::vector<T>& values) {
59+ CVoid push (const std::vector<T>& values) {
6060 while (true ) {
61- if (lock_ .try_lock ()) {
61+ if (mutex_ .try_lock ()) {
6262 for (auto & value : values) {
6363 deque_.emplace_back (value);
6464 }
65- lock_ .unlock ();
65+ mutex_ .unlock ();
6666 break ;
6767 } else {
6868 std::this_thread::yield ();
@@ -71,24 +71,6 @@ class UWorkStealingQueue : public UQueueObject {
7171 }
7272
7373
74- /* *
75- * 尝试批量写入内容
76- * @param values
77- * @return
78- */
79- CBool tryPush (std::vector<T>& values) {
80- CBool result = false ;
81- if (lock_.try_lock ()) {
82- for (const auto & value : values) {
83- deque_.emplace_back (std::forward<T>(value));
84- }
85- lock_.unlock ();
86- result = true ;
87- }
88- return result;
89- }
90-
91-
9274 /* *
9375 * 弹出节点,从头部进行
9476 * @param value
@@ -97,13 +79,13 @@ class UWorkStealingQueue : public UQueueObject {
9779 CBool tryPop (T& value) {
9880 // 这里不使用raii锁,主要是考虑到多线程的情况下,可能会重复进入
9981 bool result = false ;
100- if (!deque_.empty () && lock_ .try_lock ()) {
82+ if (!deque_.empty () && mutex_ .try_lock ()) {
10183 if (!deque_.empty ()) {
10284 value = std::forward<T>(deque_.front ()); // 从前方弹出
10385 deque_.pop_front ();
10486 result = true ;
10587 }
106- lock_ .unlock ();
88+ mutex_ .unlock ();
10789 }
10890
10991 return result;
@@ -118,13 +100,13 @@ class UWorkStealingQueue : public UQueueObject {
118100 */
119101 CBool tryPop (std::vector<T>& values, int maxLocalBatchSize) {
120102 bool result = false ;
121- if (!deque_.empty () && lock_ .try_lock ()) {
103+ if (!deque_.empty () && mutex_ .try_lock ()) {
122104 while (!deque_.empty () && maxLocalBatchSize--) {
123105 values.emplace_back (std::forward<T>(deque_.front ()));
124106 deque_.pop_front ();
125107 result = true ;
126108 }
127- lock_ .unlock ();
109+ mutex_ .unlock ();
128110 }
129111
130112 return result;
@@ -138,13 +120,13 @@ class UWorkStealingQueue : public UQueueObject {
138120 */
139121 CBool trySteal (T& value) {
140122 bool result = false ;
141- if (!deque_.empty () && lock_ .try_lock ()) {
123+ if (!deque_.empty () && mutex_ .try_lock ()) {
142124 if (!deque_.empty ()) {
143125 value = std::forward<T>(deque_.back ()); // 从后方窃取
144126 deque_.pop_back ();
145127 result = true ;
146128 }
147- lock_ .unlock ();
129+ mutex_ .unlock ();
148130 }
149131
150132 return result;
@@ -158,13 +140,13 @@ class UWorkStealingQueue : public UQueueObject {
158140 */
159141 CBool trySteal (std::vector<T>& values, int maxStealBatchSize) {
160142 bool result = false ;
161- if (!deque_.empty () && lock_ .try_lock ()) {
143+ if (!deque_.empty () && mutex_ .try_lock ()) {
162144 while (!deque_.empty () && maxStealBatchSize--) {
163145 values.emplace_back (std::forward<T>(deque_.back ()));
164146 deque_.pop_back ();
165147 result = true ;
166148 }
167- lock_ .unlock ();
149+ mutex_ .unlock ();
168150 }
169151
170152 return result; // 如果非空,表示盗取成功
@@ -176,7 +158,6 @@ class UWorkStealingQueue : public UQueueObject {
176158
177159private:
178160 std::deque<T> deque_; // 存放任务的双向队列
179- std::mutex lock_; // 用于处理deque_的锁
180161};
181162
182163CGRAPH_NAMESPACE_END
0 commit comments