unfork: Make any action thread safe
“Unfork” is the opposite of “fork”; whereas forking allows things to run concurrently, unforking prevents things from running concurrently. Use one of the functions in the Unfork module when you have an action that will be used by concurrent threads but needs to run serially.
A typical use case is a multi-threaded program that writes log messages. If threads use putStrLn
directly, the strings may be interleaved in the combined output. Instead, create an unforked version of putStrLn
:
import Unfork main :: IO () main = unforkAsyncIO_ putStrLn \putStrLn' -> _ -- Within this continuation, use -- putStrLn' instead of putStrLn
The new putStrLn'
function writes to a queue. A separate thread reads from the queue and performs the actions, thus ensuring that the actions are all performed in one linear sequence. The main thread returns after the continuation has returned and the queue is empty. If an exception is raised in either thread, both threads halt and the exception is re-raised in the main thread.
Downloads
- unfork-1.0.0.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 1.0.0.0, 1.0.0.1, 1.0.0.2 |
---|---|
Dependencies | async (>=2.2.2 && <2.3), base (>=4.14 && <4.17), safe-exceptions (>=0.1.7 && <0.2), stm (>=2.5 && <2.6) [details] |
License | Apache-2.0 |
Copyright | 2022 Mission Valley Software LLC |
Author | Chris Martin |
Maintainer | Chris Martin, Julie Moronuki |
Revised | Revision 1 made by chris_martin at 2022-05-31T18:19:54Z |
Category | Concurrency |
Home page | https://github.com/typeclasses/unfork |
Bug tracker | https://github.com/typeclasses/unfork/issues |
Source repo | head: git clone git://github.com/typeclasses/unfork.git |
Uploaded | by chris_martin at 2022-05-31T18:17:57Z |
Distributions | NixOS:1.0.0.1 |
Reverse Dependencies | 1 direct, 0 indirect [details] |
Downloads | 418 total (2 in the last 30 days) |
Rating | 2.0 (votes: 1) [estimated by Bayesian average] |
Your Rating | |
Status | Docs available [build log] Last success reported on 2022-05-31 [all 1 reports] |