Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Inter-thread exceptions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Dmitry Bely <dbely@m...>
Subject: Re: [Caml-list] Inter-thread exceptions
Xavier Leroy <xavier.leroy@inria.fr> writes:

>> Nethertheless I think it's possible for network I/O, and even portable
>> enough (should work under pthreads/windows threads). Roughly the idea is
>> following:
>> 
>> 0. Create a global "interrupt" socket.
>> 1. Perform select() before  each blocking syscall, waiting for readability
>> of "interrupt" socket or the necessary state of "main" socket.
>> 3. If "main" socket was in the necessary state, do the syscall.
>> 4. If "interrupt" socket is readable, determine interrupt to which thread
>> is requested. If it's other thread, call sched_yield() for pthreads
>> (nothing under Windows) and return to (1)
>
> For one thing, not all blocking syscalls can be made non-blocking
> using select().  (Think opening a FIFO, for instance.)  Moreover, not
> all blocking syscalls are in C code that we control.  (Think
> gethostbyname(): it will do network I/O to query the DNS, but in a way
> that we don't control.)

Why not to make "non-blocking" as much C functions as possible using
select() technique and simply wait for the completion otherwise? For the
big class of problems this approach is enough. Another crazy idea --
rewrite Ocaml library using non-blocking (asynchronous) IO functions. All
modern OSes (including Windows) should support them.

- Dmitry Bely


-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners