[m-rev.] for review: thread safe mutables (part 2)

Julien Fischer juliensf at csse.unimelb.edu.au
Wed Sep 13 16:28:15 AEST 2006


On Wed, 13 Sep 2006, Peter Wang wrote:

> On 2006-08-29, Julien Fischer <juliensf at csse.unimelb.edu.au> wrote:
>>
>> Estimated hours taken: 12
>> Branches: main
>>
>> Make the get and set operations for non-constant mutables thread safe.  (The
>> get operation for constant mutables is thread safe by definition.)  The
>> source-to-source transformation for (non-constant) mutables is modified as
>> follows: we introduce four primitive operations: unsafe_get, unsafe_set,
>> lock and unlock.
>
> I think there's a problem with this.  This code no longer compiles:
>
>    :- mutable(localsupp, random.supply, random_init(0), mostly_unique,
> 	[attach_to_io_state, untrailed]).
>
> (the important part is the mostly_unique inst)
>
> rand.m:022: In clause for `set_localsupp(in(mostly_unique))':
> rand.m:022:   in argument 1 of call to predicate `rand.unsafe_set_localsupp'/1:
> rand.m:022:   unique-mode error: the called procedure would clobber its
> rand.m:022:   argument, but variable `X' is still live.
> rand.m:022:   The goal could not be reordered, because it was impure.
> rand.m:022: In clause for `set_localsupp(in(mostly_unique), di, uo)':
> rand.m:022:   in argument 1 of call to predicate `rand.unsafe_set_localsupp'/1:
> rand.m:022:   unique-mode error: the called procedure would clobber its
> rand.m:022:   argument, but variable `X' is still live.
> rand.m:022:   The goal could not be reordered, because it was impure.
>

I'll take a look at it.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list