PDA

View Full Version : Static variables access from different threads




satyam90
Jan 20, 2009, 12:57 AM
I am using Cocoa frame work with Obj C programming. I have a class like following:

@interface ClassA: NSObject
+(int) initCount;
+(void) initialize;
+(ClassA*)createNewObject:(int)newValue;
@end


#import "ClassA.h"
static int count;

@implementation ClassA
-(id) init {
self = [super init];
count++; //some operation on count variable.
return self;
}

+(int) initCount {
return count;
}

+(void) initialize {
count = 0;
}

+(ClassA*)createNewObject:(int)newValue
{
count = newValue;
id ret = [[[self alloc] init] autorelease];
return ret;
}
@end



Now the ClassA's method "createNewObject" is being called from different threads. Now how to protect the static variable "count" being over written/read by threads at a time. I mean, how to prevent the access of "count" by different threads simultaneously.

I tried to use "NSLock", but throwing exception. Can somebody suggest me how to achieve this?



Krevnik
Jan 20, 2009, 02:13 AM
Have you checked to see what the exception message is? That will usually tell you why it was thrown. It may be just that you are using the lock improperly (which is hard to do, I know).

Since you are dealing with a simple integer though, you should be able to just use the atomic increment/decrement functions in: <CarbonCore/DriverSynchronization.h>