docs: def get(self, name, typ):
          """
          Gets a counter specified by its name.
          It counter does not exist or its type doesn't match the specified type
          it creates a new one.
  
          :param name: a counter name to retrieve.
  
          :param typ: a counter type.
  
          :return: an existing or newly created counter of the specified type.
          """
          if name == None or len(name) == 0:
              raise Exception("Counter name was not set")
  
          self._lock.acquire()
          try:
              counter = self._cache[name] if name in self._cache else None
  
              if counter == None or counter.type != typ:
                  counter = Counter(name, typ)
                  self._cache[name] = counter
  
              return counter
          finally:
              self._lock.release()