shared - i need it to be useful
Jacob Carlborg
doob at me.com
Tue Oct 16 08:56:55 UTC 2018
On 2018-10-15 20:46, Manu wrote:
> 1. traditional; assert that the object become thread-local by
> acquiring a lock, cast shared away
Instead of having to explicitly cast away shared we could leverage the
synchronized statement. It could be enhanced to allow the following:
shared int a;
Mutex mutex;
synchronized(tlsA; a, mutex)
{
// within this scope "tlsA" is the same as "a" but without
// the "shared" qualifier. "tlsA" is not allowed to escape the block
}
This could also be implemented as a library function, but that would
require casting away shared inside the implementation:
guard(a, mutex, (tlsA){
});
void guard(T)(scope shared T value, Mutex mutex, scope void delegate
(scope T) block)
{
mutex.lock_nothrow();
scope (exit)
mutex.unlock_nothrow();
block(cast(T) value);
}
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list