[fpc-pascal] getting started with threads
Jonas Maebe
jonas.maebe at elis.ugent.be
Fri Sep 18 21:50:57 CEST 2009
On 18 Sep 2009, at 21:30, Dariusz Mazur wrote:
>>
>> On 18 Sep 2009, at 16:24, Dariusz Mazur wrote:
>>
>>> I use own lockfree FIFO http://www.emadar.com/fpc/lockfree.htm to
>>> distribute task between threads
>>> its much faster and well scaling on multicore.
>>
>> Note that it won't work as is on non-x86 machines, because it's
>> missing memory barriers (and I think that you may actually need
>> memory barriers on x86 too). Atomic operations are not memory
>> barriers by themselves, and the fact that you perform an atomic
>> operation does not mean that afterwards all cpu's will immediately
>> see this new value.
> I don't know other machines. On x86 used atomic operation, as Intel
> said, all needed cache are resolved.
> I've made very stress test on several computers. it works good.
At least on PowerPC it will fail (and I guess on SPARC as well).
> Algorithm is very simple, need only 32bit CAS, thus implement it is
> possible on most platforms.
> One thing is needed: multiplatform threadswich.
>
> I use sleep(0) ,but its not best solution (I think).
At least on Mac OS X that will not do anything. There's a procedure
called "ThreadSwitch" in the interface of the system unit though. At
least for Unix platforms it will work if cthreads is used.
Jonas
More information about the fpc-pascal
mailing list