Skip to content

LightweightSemaphore weak-try? #12

@Caldfir

Description

@Caldfir

Reading through the code here, I noted the following implementation of LightweightSemaphore::tryWait():

return (oldCount > 0 && m_count.compare_exchange_strong(oldCount, oldCount - 1, std::memory_order_acquire));

If I am not mistaken, it is possible for another thread to signal between the load and the compare_exchange_strong which would result in a spurious failure. I think this is commonly referred to as a "weak-try" but if that was the intent then using compare_exchange_weak would be sufficient. I only see this code being used in one single place in this project, and in that instance the strong/weak distinction wouldn't be relevant.

I'm certainly no expert on the topic of C++11 atomic operations, so I could be mistaken.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions