Shamil Salakhetdinov
shamil at smsconsulting.spb.ru
Sat Mar 26 17:27:17 CDT 2011
John -- Let's define your target (application) system architecture on conceptual level - I guess that using "micro-level locking" you're trying (?) to achieve isn't needed... 1) you have a huge input data set; 2) you split input data set into X chunks; 3) every chunk gets processed using the same several - Y - steps; 4) on completion of step Yn input/semi-processed chunk Xn is submitted to the Y(n+1) processor class; 5) when all X chunks are processed in Y steps they get collected into a final "huge" output set to produce Z reports. That's it from conceptual high level point of view? Something important missing? Too simplified to be true? John, please take into account that I can't reply promptly here - it's weekend now and I'll be out tomorrow, and it's 1:26 a.m. - time to sleep, and then I have quite some work to do starting Monday - so I expect this thread will be supported by other AccessD/dba-VB members... Thank you. -- Shamil -----Original Message----- From: dba-vb-bounces at databaseadvisors.com [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby Sent: 27 ????? 2011 ?. 0:53 To: Discussion concerning Visual Basic and related programming issues. Subject: Re: [dba-VB] c# lock() Shamil, I am trying to build a base class which contains a set of lock objects and some standard variables. Having defined the lock objects static per your code below, the derived class cannot access the lock objects even though I set them protected: protected static Object LockBln = new Object(); In the derived class when I try to access it: lock(this.LockBln) { } I get a compile error: "Member cannot be accesses with an instance reference; Qualify it with a type name instead." What does this mean? Reading on the internet it says that static properties are shared between all instances of the class. I don't see how I can share a property between 50 instances and then use a lock(MyStaticProperty) {}. I'm so confused... John W. Colby www.ColbyConsulting.com On 3/25/2011 5:05 PM, Shamil Salakhetdinov wrote: > Hi John -- > > Your sample is a correct usage of locking - just use static thisLock > variable > > private static Object thisLock = new Object() > > as non-static variable *is not* thread safe AFAIU. > > Yes, such locking can be done for various operations of that class - > just make sure you'll not get dead-locked... > Also use *one lock object* to lock *one resource* in a class - > otherwise "deadlock" will become your "everyday guest"... > > Thank you. > > -- > Shamil > > -----Original Message----- > From: dba-vb-bounces at databaseadvisors.com > [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby > Sent: 25 ????? 2011 ?. 22:58 > To: Discussion concerning Visual Basic and related programming issues. > Subject: Re: [dba-VB] c# lock() > > Shamil, > > Does this allow using a single "lock object" to lock various > operations in a class. > > For example I want to lock a date flag variable while using a property > to either get or set the variable. > > private Object thisLock = new Object(); > > public DateTime pFlagDte { > get { > lock (thisLock) > { > return dteFlag; > } > } > set > { > lock (thisLock) > { > dteFlag = value; > } > } > } > > The issue is not multiple threads trying to write to the date variable > but rather one thread trying to read it while another is writing it. > > John W. Colby > www.ColbyConsulting.com _______________________________________________ dba-VB mailing list dba-VB at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-vb http://www.databaseadvisors.com