GC, the simple solution

Bruno Medeiros brunodomedeirosATgmail at SPAM.com
Mon Jun 12 11:16:54 PDT 2006


Sean Kelly wrote:
> Bruno Medeiros wrote:
>> Sean Kelly wrote:
>>> Bruno Medeiros wrote:
>>>> Walter Bright wrote:
>>>>>> Only if the reference is stored,
>>>>>> the ref counter has to be incremented. This is only possible if 
>>>>>> this is
>>>>>> done by the compiler. No smart pointer can do this :)
>>>>>>
>>>>>>> 3) in a multithreaded app, the incs and decs must be synchronized
>>>>>>
>>>>>> Isn't a atomic inc/dec enough?
>>>>>
>>>>> That requires synchronizing.
>>>>>
>>>>
>>>> Are you sure? It says in 
>>>> http://www.iecc.com/gclist/GC-algorithms.html#Reference%20counting 
>>>> that:
>>>> "In a multi-threaded system, if threads are preemptively scheduled, 
>>>> reference counting requires additional care to ensure that the 
>>>> updates to reference counts are atomic. This is straightforward 
>>>> using hardware primitives such as fetch-and-add, compare-and-swap, 
>>>> or load-linked/store-conditional, but it is definitely necessary to 
>>>> pay attention to this detail." ?
>>>
>>> These are synchronizing operations.
>>
>> By "That requires synchronizing." I thought Walter meant stuff with 
>> mutexes, etc. (i.e., non-trivial stuff), because, can't those hardware 
>> synchronizing operations be called "atomic inc/dec" ?
> 
> For the most part.  There are really two issues here.  First, the 
> operation must be atomic with respect to other threads.  The x86 
> actually guarantees this for all load/store operations on aligned data 
> <= the bus size.  Second, the operations must be observed in the proper 
> order by other threads--ie. the compiler and all involved CPUs (reader 
> and writer) are not allowed to reorder the operations or do any other 
> fancy tricks that may result in a load/store order that isn't the same 
> as program order.  For the compiler, this is where volatile comes in, 
> and at the hardware level, a synchronizing operation may be required 
> depending on the situation and on the hardware involved.  Again, with 
> x86 you can get away without a LOCK a lot of the time, but not always. 
> So you really must assume that any competing operation has a worst case 
> cost of... well, a lot.
> 
> 
> Sean

Ah, I see. I had recently read about relative out-of-order execution 
problems in the Memory Barrier wikipedia entry, and I got the impression 
(out of nowhere) that the hardware took care of that transparently 
(i.e., without program intervention), but then, that is not the case, 
not allways at least?

-- 
Bruno Medeiros - CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list