I haven't found any good references on the subject, but here's my understanding: - epoch_enter() and epoch_exit() are very inexpensive operations (cheaper than mtx, rw_lock or rm_lock operations) that are use to mark read-only critical sections - epoch_wait() guarantees that no threads that were in the critical section when it was first called are still in the critical section when it completes With this guarantee, you can safely destroy an object with the following procedure: 1. Atomically remove all global pointers to the object (e.g. remove it from any lists that the critical sections might look it up in). This must be done atomically because read-only threads can be concurrently running in the critical section. This guarantees that no more threads can get a pointer to it. 2. Call epoch_wait() to drain all threads that already held pointers to it before step 1. 3. You now hold the only pointer to the object, so you are free to destroy it as you please.Received on Tue Oct 08 2019 - 21:22:28 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:22 UTC