diff options
Diffstat (limited to 'src/Flag.hs')
-rw-r--r-- | src/Flag.hs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/Flag.hs b/src/Flag.hs new file mode 100644 index 0000000..0896187 --- /dev/null +++ b/src/Flag.hs @@ -0,0 +1,36 @@ +-- Copyright © 2015 Benjamin Barenblat +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); you may not +-- use this file except in compliance with the License. You may obtain a copy +-- of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +-- License for the specific language governing permissions and limitations under +-- the License. + +module Flag ( Flag + , new + , wave + , wait + ) where + +import Control.Concurrent.MSampleVar + +-- | A flag that a thread can wave at another thread. +newtype Flag = Flag (MSampleVar ()) + +-- | Creates a new flag. +new :: IO Flag +new = fmap Flag newEmptySV + +-- | Waves the flag, allowing a thread waiting on the flag to wake up. +wave :: Flag -> IO () +wave (Flag v) = writeSV v () + +-- | Waits until the flag is waved. +wait :: Flag -> IO () +wait (Flag v) = readSV v |