[Haskell-cafe] semantics of concurrent program depends on -O level, -f[no-]omit-yields

Brandon Allbery allbery.b at gmail.com
Thu Nov 29 18:48:21 UTC 2018


This is undoubtedly nothing more than timing issues. Remember that the main
thread exiting will kill the entire process, automatically killing all
other threads as side effect. So the question is how much the thread
manages to get done before that happens.

If you disable output buffering, you may find that "f" or "fo" sometimes
gets written before process exit.

On Thu, Nov 29, 2018 at 1:43 PM Johannes Waldmann <
johannes.waldmann at htwk-leipzig.de> wrote:

> Dear Cafe,
>
> I am surprised by the behaviour of the program below
> (the interesting property is whether it will output "foo").
>
> Behaviours (plural) actually: it seems to depend
> on optimisation level, on omit-yields,
> and on very small changes in the source code:
>
> It does print (mostly), when compiled with -O0.
> It does not, when compiled with -O2.
> With -O2 -fno-omit-yields, it will print.
> With -O0 -fno-omit-yields, and when I remove the two newTVar
> in the beginning, it will mostly not print.
>
> How come?
>
> These differences already occur with the
> last two lines replaced by "forever $ return ()",
> so the STM stuff may be inessential here.
> But that's the context where I came across the problem.
>
> - J.W.
>
>
> import Control.Concurrent.STM
> import Control.Concurrent ( forkIO )
> import Control.Monad ( forever )
> import System.IO
>
> main = do
>
>   atomically $ newTVar "bar"
>   atomically $ newTVar False
>
>   forkIO $ putStrLn "foo"
>
>   x <- atomically $ newTVar False
>   forever $ atomically $ writeTVar x True
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.



-- 
brandon s allbery kf8nh
allbery.b at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20181129/40a292df/attachment.html>


More information about the Haskell-Cafe mailing list