https://issues.dlang.org/show_bug.cgi?id=20936

          Issue ID: 20936
           Summary: core.sync.rwmutex should have shared overloads (and
                    make it usable in @safe code)
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: druntime
          Assignee: nob...@puremagic.com
          Reporter: er.kr...@gmail.com

In the same way core.sync.mutex has.

Currently a ReadWriteMutex that is an internal member of a shared class /
struct has to cast away shared to be usable.

This leads to the following ugliness:

```
import core.sync.rwmutex;

class C {
    public:
    shared this() {
        rwmutex = cast(shared) new ReadWriteMutex(); // This is bad, but...
    }

    shared int readData() {
        synchronized((cast ()rwmutex).reader) { // ... this is ugly as hell
            // Let's get some data here
            return 42;
        }
    }

    shared void setData(int data) {
        synchronized((cast ()rwmutex).writer) { // ditto
            // Store data here
        }
    }

    private:
    ReadWriteMutex rwmutex;
}

void main() {
    shared C c = new shared C();
}
```

It probably should get the same kind of `shared` overloads that the normal
Mutex did.

Also, it prevents it from being used in @safe code (although the class is not
@safe at all, it probably could be with little effort).

--

Reply via email to