diff --git a/src/python/dm/common/utility/threadingUtility.py b/src/python/dm/common/utility/threadingUtility.py
new file mode 100755
index 0000000000000000000000000000000000000000..98460ede7ed888ed384720db2e7c6dddb4ab83c5
--- /dev/null
+++ b/src/python/dm/common/utility/threadingUtility.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+
+
+class ThreadingUtility:
+
+    # Assumes class has instance lock initialized
+    @classmethod
+    def synchronize(cls, func):
+        def synchronized(*args, **kwargs):
+            im_self = args[0]
+            im_self.lock.acquire()
+            try:
+                result = func(*args, **kwargs)
+                return result
+            finally:
+                im_self.lock.release()
+        return synchronized
+
+#######################################################################
+# Testing.
+if __name__ == '__main__':
+    import threading
+    class A:
+        def __init__(self):
+            self.lock = threading.RLock()
+
+        @ThreadingUtility.synchronize
+        def twoX(self, x):
+            print 'X=', x
+            return 2*x
+
+    a = A()
+    t = a.twoX(3)
+    print 'Result: ', t
+