Simon Peyton-Jones wrote:
That's a positive advantage, provided there isn't a massive efficiency
cost.  I'm all for nuking 'threadsafe' if we can!
Simon Marlow wrote:
However, at the time I don't think we appreciated the implementation
diffiulties arising from "safe".
After thinking about it a little, I'm not even ready to bet that "safe" would
be that much faster than "threadsafe" for GHC...

Safe call-out can probably be optimized by not sending a signal
to a worker thread. (Worker thread spawning happens only the first time,
so it is not an issue).
Afterwards, we could immediately re-grab the "Capability" (without waiting)
and reenter the RTS, _unless_ there has been a call-in in the meantime.
We cannot do call-ins the same way as in the non-threaded RTS,
because when "threadsafe" calls are around, we cannot return from
schedule() (execution might have moved to a different worker).
After a call-in, the worker thread that was used to handle the call-in would
still hold the capability and continue executing haskell code, so a safe call
would have turned threadsafe. This might be difficult to prevent in practice.

Also, the biggest piece of wasted performance that's currently lying around
there is the locking for call-ins: give me a version of allocate that I can safely
call with only the sched_mutex held (while STG code is executing in another
thread), and I can cut the number of context switches for a call-in in half.

Simon PJ wrote:
To be completely explicit, I think that increasing the safety level of
any foreign import should never make the program fail.
I like that. Did I already mention that I think that the safest variant should
be the default? ;-)

| [...]
| What should happen when C code running in a separate OS thread calls a
| foreign exported
| function while the Haskell Runtime is blocked on a safe call?

Would all these questions go away if we made safe=threadsafe?
Yes. All but the last one also go away when we keep the distinction, but say that
"increasing the safety level [...] should never make the program fail".


Cheers,
Wolfgang

_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi


Reply via email to