On Monday, 25 November 2019 at 08:22:17 UTC, Andrej Mitrovic wrote:
From: https://github.com/dlang/phobos/blob/10b9174ddcadac52f6a1ea532deab3310d3a8c03/std/concurrency.d#L1913-L1916:

-----
///
final @property bool isClosed() @safe @nogc pure
{
    synchronized (m_lock)
    {
        return m_closed;
    }
}
-----

I don't understand the purpose of this lock. The lock will be released as soon as the function returns, and it returns a copy of a boolean anyway. Am I missing something here?

I think this code can be rewritten as
---
final @property bool isClosed() @safe @nogc pure
{
    bool ret;

    synchronized (m_lock)
    {
        ret = m_closed;
    }

    return ret;
}
---

Normally, if the memory location of m_closed is aligned, the assignment to 'ret' should be atomic, however if you cannot make assumptions about alignment, the access should be protected.

Reply via email to