Created
March 11, 2021 20:49
-
-
Save ChristopherDavenport/d7bd0c82df4f1a46e40a8cb0ae326c79 to your computer and use it in GitHub Desktop.
Wrapping Read-Write Lock
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import cats.effect._ | |
| trait Lock[F[_]]{ | |
| def lock: F[Unit] | |
| def unlock: F[Unit] | |
| } | |
| object Lock { | |
| def fromLock[F[_]: Sync](jlock: java.util.concurrent.locks.Lock): Lock[F] = new Lock[F]{ | |
| def lock: F[Unit] = Sync[F].blocking(jlock.lockInterruptibly()) | |
| def unlock: F[Unit] = Sync[F].blocking(jlock.unlock()) | |
| } | |
| } | |
| trait ReadWriteLock[F[_]]{ | |
| def readLock: Lock[F] | |
| def writeLock: Lock[F] | |
| } | |
| object ReadWriteLock { | |
| def impl[F[_]: Sync](jlock: java.util.concurrent.locks.ReadWriteLock): ReadWriteLock[F] = | |
| new ReadWriteLock[F] { | |
| def readLock: Lock[F] = Lock.fromLock(jlock.readLock()) | |
| def writeLock: Lock[F] = Lock.fromLock(jlock.writeLock()) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment