class_docstr: Subclass of QMutex that provides useful debugging information during
  deadlocks--tracebacks are printed for both the code location that is 
  attempting to lock the mutex as well as the location that has already
  acquired the lock.
  
  Also provides __enter__ and __exit__ methods for use in "with" statements.
class_docstr_tok: ["Subclass","of","QMutex","that","provides","useful","debugging","information","during","deadlocks","--","tracebacks","are","printed","for","both","the","code","location","that","is","attempting","to","lock","the","mutex","as","well","as","the","location","that","has","already","acquired","the","lock",".","Also","provides","__enter__","and","__exit__","methods","for","use","in","``","with","''","statements","."]
code: def unlock(self):
      QtCore.QMutex.unlock(self)
      if self.debug:
          self.l.lock()
          try:
              # print 'unlock', self, len(self.tb)
              if len(self.tb) > 0:
                  self.tb.pop()
              else:
                  raise Exception(
                      "Attempt to unlock mutex before it has been locked"
                  )
          finally:
              self.l.unlock()
  
file_path: pyqtgraph/pyqtgraph/util/mutex.py
imports: import traceback
  from ..Qt import QtCore
label_desc: Use image node_id 4 for calling the Mutex obj's underlying member method code with example usage: obj.unlock() without return types