C++ (Cpp) hp_owner Example

Introduction

The c++ (cpp) hp_owner example is extracted from the most popular open source projects, you can refer to the following example for usage.

Programming language: C++ (Cpp)

Class/type: hp_owner

Example#1
File: stack_hp.cppProject: subjam/concurrency-in-action

std::atomic<void*>& get_hazard_pointer_for_current_thread()
{
    // The first time each thread calls this function, a new instance of
    // hp_owner is created. The constructor for this new instance then
    // searchs through the table of owner/pointer pairs looking for an entry
    // without an owner. It uses compare_exchange_strong() to check for an 
    // entry without an owner and claim it in one go.
    //
    // Once the hp_owner instance has been created for a given thread, further
    // accesses are much faster because the pointer is cached, so the table
    // doesn't have to be scanned again.
    
    printf("get harzard pointer for current thread, thread id: %d\n", std::this_thread::get_id());
    thread_local static hp_owner hazard;
    return hazard.get_pointer();
}

Example#2
File: HazardPointers.cppProject: jaideepray1989/genericproject

std::atomic<void *> &get_hazard_pointer_for_current_thread() {
    static hp_owner hazard;
    return hazard.get_pointer();
}