假设在系统中,用户将向系统注册回调函数,并且在触发事件时将调用回调函数,但如果事件已被触发,则用户将同步调用回调函数。
例如,用户i在时间Ti注册cb i, 并且该事件在时间Te被触发。假设T1 < T2&lt; T3&lt; ......&lt; Tm&lt; Te&lt; Tm + 1&lt; ......&lt; TN。在时间Te,cb1,cb2,...,cbm将被调用。 cbm + 1,...,cbn将被同步调用。
因此,我们需要实施两个API:void register_cb(cb)
和void trigger_event()
。
以下是Python实现。
is_triggered = 0
mutex = 1
def register_cb(cb):
q=deque([])
wait(mutex)
if is_triggered == 0:
q.append(cb)
signal(mutex)
else:
signal(mutex)
cb()
def trigger_event():
is_triggered = 1
wait(mutex)
signal(mutex)
while q:
q.popleft()
cb()
我们如何使用相同的多线程处理将代码转换为C ++?