Locking data

Alex sascha.orlov at gmail.com
Tue May 22 22:10:52 UTC 2018


On Tuesday, 22 May 2018 at 21:45:07 UTC, IntegratedDimensions 
wrote:
> an idea to lock data by removing the reference:
>
> class A
> {
>    Lockable!Data data;
> }
>
> The idea is that when the data is going to be used, the user 
> locks the data. The trick here is that data is a pointer to the 
> data and the pointer is set to null when locked so no other 
> data can use it(they see a null reference). To unlock, the data 
> is reassigned:
>
> auto d = data.lock(); // A.data is now null deals with sync 
> issues
> //use d
> d = data.unlock(d); // restores A.data (A.data = d;) and sets d 
> to null so any future reference is an error(could produce bugs 
> but should mostly be access violations)
>
>
> Anyone else trying to use data will see that it is null while 
> it is locked.
>
> This basically pushes the standard locking mechanisms in to the 
> Lockable!data(first come first serve) and code that has not 
> captured the data see's it simply as null.
>
> Anyone use know if there exists an idiom like this and what it 
> is called? Maybe some idiomatic code that is efficient?
>
>
> Ideally I'd want to be able to treat the Lockable!Data as Data. 
> Right now I have to classes(or pointers to structs) and few 
> weird hacks. I think what I'll have to end up doing is having a 
> Locked!Data structure that is returned instead or use an UFCS. 
> The idea being to attach the lock and unlock methods.

Are you aware of NullableRef?
https://dlang.org/library/std/typecons/nullable_ref.html

Does it fit somehow?


More information about the Digitalmars-d-learn mailing list