On 10/8/19 4:22 PM, Ryan Stone wrote: > 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. Ok thanks. Gottit. thanks for the description.Received on Tue Oct 08 2019 - 23:50:05 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:22 UTC