Terry Kerr wrote:
> I have a method which increments an attribute on the current object.  I
> have created a thread lock so that multiple threads accessing the method
> simultaneously cannot stuff up the attribute value:

The ZODB doesn't work like that ;-)
As I understand it, each DB connection gets it's own consistent copy of the ODB,
so you don't need to worry about locking...

> def nextOrderNumber(self):
>     lock.acquire()
>     self._order_number = self._order_number + 1
>     lock.release()
>     return str(self._order_number)
> My concern is that even though a second thread is halted at
> "lock.acqure()" while the first thread updates the order_number, that
> the second thread has an 'out of date' version of 'self' with the
> original order_number value in it, hence, is still returning the
> incorrect order_number.

Indeed. The is called conflict resolution and your problem is solved as an
example in:
...in the section "Resolving Conflicts"

Personally, I'd use a file-based counter or auto incrementing sequel column.



Zope-Dev maillist  -  [EMAIL PROTECTED]
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope )

Reply via email to