>________________________________
> From: Carl Poirier <carl.poirie...@gmail.com>
>To: Marco Serantoni <marco.serant...@gmail.com> 
>Cc: Kicad Developers <kicad-developers@lists.launchpad.net> 
>Sent: Wednesday, January 22, 2014 3:51 AM
>Subject: Re: [Kicad-developers] Net names and net codes
> 
>
>
>There are some things in the code that don't like being multithreaded. If I 
>parallelize the for loop in RN_DATA::Recalculate( int aNet ), I get a 
>segfault. It does not happen if I put a lock to the call updateNet( i ), but 
>obviously there is no increase in performance. I'm trying to find out what's 
>the problem now.
>
>
>
This sounds to me like data is being altered by different threads and possibly 
there is some memory reallocation happening (growing arrays, etc). Locks are 
only needed when there is contention somewhere and of course locks should only 
be held for as short as needed. Another pitfall with threading is that some 
variables may need to be declared 'volatile' if they can be altered in another 
thread while one function is executing. For example, let's say the variable 
'bool someX' can be altered in 2 threads; something like this can happen:

1. FunctionA starts, and runs a loop while(!someX) { ... }
2. FunctionB sets 'someX' to 'true'
3. FunctionA continues to run the loop, which is not the intended behavior

Of course similar things can happen when using shared memory and forked 
processes.

Threading has other problems to watch out for - for example, are there any 
static variables in functions? If so then you simply cannot thread those 
functions without locks.

- Cirilo


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to