Re: Threads and synchronization
Re: Threads and synchronization
- Subject: Re: Threads and synchronization
- From: John Stiles <email@hidden>
- Date: Thu, 10 Aug 2006 08:36:33 -0700
Cem Karan wrote:
1. Start a periodic timer in your main thread and use a shared
variable to store progress information. You protect your shared
variables using @synchronized or NSLock objects if necessary (if it's
just a 32 bit integer storing progress that's not necessary).
Please use locks or @synchronized on everything that's shared, unless
you are utterly certain that there is no way that corruption of the
shared data can ever affect you. I've seen some very, very strange
problems happen because someone decided that not locking was OK 'just
this once' which can be easily avoided by locking/synchronizing.
And before you say that it's OK because it is just a 32 bit integer,
yes, I HAVE seen weirdness that way too; I'll admit, it was on a
misaligned data access (part of a packed struct), but still, it CAN
bite you!
It's possible even with aligned stuff. Every time you do "x += y", the
generated code reads the value of x out of RAM into a register, modifies
it, and then writes it back. There is a brief window of opportunity
where some other thread could overwrite its value while you have it in a
register, and then your thread will clobber that write.
This issue may be more complicated on Intel where there are
"direct-to-memory" operations, but the basic principle is still
applicable; any time you have the value in a register and you're
performing operations on it, you are vulnerable.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden