A simple version of iOS dispatch_group
Inspired by Mike Ash’s let’s build series, I write this article as my initial self-build in a simple version.
Firstly, what dispatch_group_t is ? It is easy to read Apple’s code and figure out, it is just an NSObject object , confronting OS_dispatch_group_protocol.
Then what should my dispatch_group (mn_dispatch_group) be? It of course can be like dispatch_group_t, but to make things simple, I created a new class called MNDispatchGroup with three API: enter, wait, and leave.
And the main part is the mechanism for making a barrier and to signal the barrier to continue. I chose C++’s condition_variable(cv), which works with unique_lock . While the unique_lock variable locks the mutex, the cv provides a wait API, which stops the current running thread and the notify API to pass it. This is mn_barrier. The source code is in the attached link.
Finally, it may need some more measurements to know exactly if this MNDispatchGroup really is as fast as dispatch_group_t. Besides there are other tools for further research like C++20’s latch or barrier.
Source code for mn_barrier : https://github.com/mihozil/mn_barrier/tree/main