[Haskell-cafe] Re: I/O interface
k.schupke at imperial.ac.uk
Thu Jan 13 04:44:10 EST 2005
No I meant Channels (from Data.Concurrent)... you can use a structure like:
data Command = Read FileAddr (MVar MyData) | Write FileAddr MyData
So to write you just do:
writeChan iochan (Write address data) -- returns immediately
-- write happens asynchronously later
and to read:
data <- newEmptyMVar
writeChan iochan (Read address data) -- read not happend yet.
myData <- readMVar data -- blocks until read completes.
The forked thread (with forkIO) just reads the commands form the "iochan"
and processes them one at a time.
Ketil Malde wrote:
>Keean Schupke <k.schupke at imperial.ac.uk> writes:
>>At the end of the day IO is serial by nature (to one device anyway),
>>so the way to do this into one file is to have one thread that reads
>>and writes, and to 'send' read and write requests over channels from
>>the threads that need the work done
>Would the stream proposal make this possible and easy? I.e. could the
>IO thread provide (say) output streams to the other threads, and pass
>writes on to its own output stream?
More information about the Haskell-Cafe