caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Richard Jones <rich@annexia.org>
To: caml-list@inria.fr
Subject: [Caml-list] Threads & the order that module initialization code runs
Date: Tue, 1 Jul 2003 14:34:15 +0100	[thread overview]
Message-ID: <20030701133415.GA28214@redhat.com> (raw)


A quick question about threads:

I have a few modules simulating a network and some machines connected
to the network.

In, for example, network.ml, I have a bunch of initialization code at
the top level:

--- network.ml ---
let new_queue i =
  (Queue.create (),
   Mutex.create (),
   Condition.create ()) in
let out_queue = Array.init nr_machines new_queue

(* There is one queue of incoming messages to the network thread. *)
let in_queue = Queue.create ()

(* Mutex/condition protecting the in_queue. *)
let in_mutex = Mutex.create ()
let in_cond = Condition.create ()
------

And also I have a Main module which starts up the threads:

--- main.ml ---
(* Create a thread to simulate the network. *)
let network_thread = Thread.create Network.run ();;

(* Start a thread for each of the simulated machines. *)
let machine_thread = Array.init nr_machines (Thread.create Machine.run);;
------

It's obviously going to be a problem if the initialization code in
Network hasn't run by the time the machine threads have been started
up in Main (or if the network thread itself gets started up first).

Now it all seems to work, but am I being lucky or do module
initializers run in some sort of well-defined order I can depend on?

Rich.

-- 
Richard Jones. http://www.annexia.org/ http://freshmeat.net/users/rwmj
Merjis Ltd. http://www.merjis.com/ - all your business data are belong to you.
'There is a joke about American engineers and French engineers. The
American team brings a prototype to the French team. The French team's
response is: "Well, it works fine in practice; but how will it hold up
in theory?"'

-------------------
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


             reply	other threads:[~2003-07-01 13:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-01 13:34 Richard Jones [this message]
2003-07-01 15:24 ` Michel Christophe
2003-07-01 23:13 ` Yamagata Yoriyuki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030701133415.GA28214@redhat.com \
    --to=rich@annexia.org \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).