Bugs item #1746071, was opened at 2007-07-01 20:19 Message generated for change (Comment added) made by orsenthil You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1746071&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Python Library Group: Python 2.5 Status: Open Resolution: None Priority: 5 Private: No Submitted By: David Benbennick (dbenbenn) Assigned to: Nobody/Anonymous (nobody) Summary: class mutex doesn't do anything atomically Initial Comment: >>> import mutex >>> print mutex.mutex.testandset.__doc__ Atomic test-and-set -- grab the lock if it is not set, return True if it succeeded. The above docstring is wrong: the method is not atomic. This is easy to see by inspecting the method's code: def testandset(self): """Atomic test-and-set -- grab the lock if it is not set, return True if it succeeded.""" if not self.locked: self.locked = 1 return True else: return False Therefore, it is possible for two threads to lock the same mutex simultaneously. So the mutex module cannot be used for mutual exclusion. The documentation for mutex says "The mutex module defines a class that allows mutual-exclusion via acquiring and releasing locks." [http://docs.python.org/lib/module-mutex.html]. Perhaps it would be a good idea to make the module actually do what the documentation says. ---------------------------------------------------------------------- Comment By: O.R.Senthil Kumaran (orsenthil) Date: 2007-07-02 08:40 Message: Logged In: YES user_id=942711 Originator: NO Hi David, I just fired up the docs and found this: "The mutex module defines a class that allows mutual-exclusion via acquiring and releasing locks. It does not require (or imply) threading or multi-tasking, though it could be useful for those purposes." The docs dont say about threads using mutex object, but instead say if you want to use threading you can use mutex obj. How are you using mutex with threads, can you please provide some information. If muobj is an instance of mutex class. muobj.testandset() for process-a will set the lock. muobj.testandset() for process-b will be dealt with self.lock = True and wont be able to set. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1746071&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com