luca_ciciriello at hotmail.com
Fri Oct 2 12:42:30 EDT 2009
I understand, your explanation is clear.
I just need to study more Haskell. Im' just a beginner but very
enthusiastic learning this "think-different" language (I'm a 12-year
experienced C++ programmer).
On Oct 2, 2009, at 6:28 PM, Daniel Peebles wrote:
> Hi Luca,
> Just in case you weren't aware of it, your example didn't actually
> contain any STM (beyond the import), just regular Haskell IO-based
> But the answer to your question is that there's no synchronization on
> writing to a file descriptor, so both threads are "simultaneously"
> writing to stdout (hPutStr stdout "...\n" === putStrLn "..." by the
> way) and result in the interleaved results you see. One solution is to
> have a thread that effectively owns stdout, and instead of writing to
> stdout, you write to a Chan (Control.Concurrent.Chan) to talk to the
> stdout owner, who will then write out your messages. This approach
> will give you the "Hello world" or "world Hello" output that you were
> Hope this helps,
> On Fri, Oct 2, 2009 at 12:16 PM, Luca Ciciriello
> <luca_ciciriello at hotmail.com> wrote:
>> Hi All.
>> I'm very new using Concurrency and STM in Haskell. I'm trying some
>> example using STM like this one:
>> module Main
>> import IO
>> import Control.Concurrent
>> import Control.Concurrent.STM
>> main :: IO ()
>> main = do
>> forkIO (hPutStr stdout "Hello")
>> hPutStr stdout " world\n"
>> Loading this module in GHCi and running main, the result is:
>> On MacOs X 10.5.8 and on WindowsXp
>> Compiling this module with:
>> ghc --make Main.hs -o Main
>> and launcing ./Main the result is just:
>> Terminal> world
>> Am I doing something wrong? My expected result was Hello world (or
>> Thanks in advance for any answer.
>> Glasgow-haskell-users mailing list
>> Glasgow-haskell-users at haskell.org
More information about the Glasgow-haskell-users