Add _empty_p & _pop_move_blocking
This commit is contained in:
1 parent
4691f95b73
commit
3dde8d45c1
1 file changed
+30
@@ -167,6 +167,17 @@
|
|||||||
M_CALL_CLEAN(oplist, out->data); \
|
M_CALL_CLEAN(oplist, out->data); \
|
||||||
m_mutex_unlock (out->lock); \
|
m_mutex_unlock (out->lock); \
|
||||||
} \
|
} \
|
||||||
|
,) \
|
||||||
|
\
|
||||||
|
M_IF_METHOD(TEST_EMPTY, oplist)( \
|
||||||
|
static inline bool \
|
||||||
|
M_C(name, _empty_p)(concurrent_t out) \
|
||||||
|
{ \
|
||||||
|
m_mutex_lock (out->lock); \
|
||||||
|
bool b = M_CALL_TEST_EMPTY(oplist, out->data); \
|
||||||
|
m_mutex_unlock (out->lock); \
|
||||||
|
return b; \
|
||||||
|
} \
|
||||||
,) \
|
,) \
|
||||||
\
|
\
|
||||||
M_IF_METHOD(SET_KEY, oplist)( \
|
M_IF_METHOD(SET_KEY, oplist)( \
|
||||||
@@ -361,6 +372,25 @@
|
|||||||
m_mutex_unlock (out->lock); \
|
m_mutex_unlock (out->lock); \
|
||||||
return ret; \
|
return ret; \
|
||||||
} \
|
} \
|
||||||
|
,) \
|
||||||
|
\
|
||||||
|
M_IF_METHOD2(POP_MOVE, TEST_EMPTY, oplist)( \
|
||||||
|
static inline bool \
|
||||||
|
M_C(name, _pop_move_blocking)(M_GET_SUBTYPE oplist *p, concurrent_t out, bool blocking) \
|
||||||
|
{ \
|
||||||
|
bool ret = false; \
|
||||||
|
m_mutex_lock (out->lock); \
|
||||||
|
while (blocking) { \
|
||||||
|
if (!M_CALL_TEST_EMPTY(oplist, out->data)) { \
|
||||||
|
M_CALL_POP_MOVE(oplist, p, out->data); \
|
||||||
|
ret = true; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
m_cond_wait(out->there_is_data, out->lock); \
|
||||||
|
} \
|
||||||
|
m_mutex_unlock (out->lock); \
|
||||||
|
return ret; \
|
||||||
|
} \
|
||||||
,) \
|
,) \
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in new issue
Block a user