Something needs to happen with shared, and soon.

luka8088 luka8088 at owave.net
Thu Nov 15 04:59:29 PST 2012


On 15.11.2012 11:52, Manu wrote:
> On 15 November 2012 12:14, Jacob Carlborg <doob at me.com
> <mailto:doob at me.com>> wrote:
>
>     On 2012-11-15 10:22, Manu wrote:
>
>         Not to repeat my prev post... but in reply to Walter's take on
>         it, it
>         would be interesting if 'shared' just added implicit lock()/unlock()
>         methods to do the mutex acquisition and then remove the cast
>         requirement, but have the language runtime assert that the object is
>         locked whenever it is accessed (this guarantees the safety in a more
>         useful way, the casts are really annying). I can't imagine a
>         simpler and
>         more immediately useful solution.
>
>
>     How about implementing a library function, something like this:
>
>     shared int i;
>
>     lock(i, (x) {
>          // operate on x
>     });
>
>     * "lock" will acquire a lock
>     * Cast away shared for "i"
>     * Call the delegate with the now plain "int"
>     * Release the lock
>
>     http://pastebin.com/tfQ12nJB
>
>
> Interesting concept. Nice idea, could certainly be useful, but it
> doesn't address the problem as directly as my suggestion.
> There are still many problem situations, for instance, any time a
> template is involved. The template doesn't know to do that internally,
> but under my proposal, you lock it prior to the workload, and then the
> template works as expected. Templates won't just break and fail whenever
> shared is involved, because assignments would be legal. They'll just
> assert that the thing is locked at the time, which is the programmers
> responsibility to ensure.


I managed to make a simple example that works with the current 
implementation:

http://dpaste.dzfl.pl/27b6df62

http://forum.dlang.org/thread/k7orpj$1tt5$1@digitalmars.com?page=4#post-k7s0gs:241h45:241:40digitalmars.com

It seems to me that solving this shared issue cannot be done purely on a 
compiler basis but will require a runtime support. Actually I don't see 
how it can be done properly without telling "this lock must be locked 
when accessing this variable".

http://dpaste.dzfl.pl/edbd3e10


More information about the Digitalmars-d mailing list