 public postfix func -- (semaphore: Semaphore) {
     semaphore.wait()
 }
+public func <<< (mutex:Mutex,block:() -> Void) -> Mutex {
+    mutex.synchronize(block)
+    return mutex
+}
+public func <<< <T:AnyObject> (l:LockedObject<T>,block:(object:T) -> Void) -> LockedObject<T> {
+    l.access(block)
+    return l
+}

    public init(_ kind:Kind = .Binary) {
        self.kind = kind
        let resource = kind.unitsCount()
        semaphore = dispatch_semaphore_create(resource)
    }
    
    //MARK: - Semaphore core method

        mutext = Mutex()
    }
    func access(block:(object:T) -> Void) {
        mutext.synchronize { (Void) -> Void in
            block(object: self.object)
        }
    }
