From schlein@cs.umbc.edu  Mon Dec  4 12:07:50 1995
Return-Path: schlein@cs.umbc.edu
Received: from umbc4.umbc.edu (root@umbc4.umbc.edu [130.85.1.4]) by umbc7.umbc.edu (8.6.12/Umbc) with ESMTP id MAA22598 for <motteler@umbc7.umbc.edu>; Mon, 4 Dec 1995 12:07:49 -0500
Received: from algol.cs.umbc.edu (algol.cs.umbc.edu [130.85.100.2]) by umbc4.umbc.edu (8.6.12/8.6.9) with ESMTP id MAA29762 for <motteler@umbc.edu>; Mon, 4 Dec 1995 12:07:48 -0500
Received: from retriever.cs.umbc.edu (schlein@retriever.cs.umbc.edu [130.85.100.32]) by algol.cs.umbc.edu (8.6.12/8.6.9) with ESMTP id MAA02868 for <motteler@cs>; Mon, 4 Dec 1995 12:07:46 -0500
From: Jonas Schlein <schlein@cs.umbc.edu>
Received: (schlein@localhost) by retriever.cs.umbc.edu (8.6.12/8.6.9) id MAA28395 for motteler@cs; Mon, 4 Dec 1995 12:07:46 -0500
Message-Id: <199512041707.MAA28395@retriever.cs.umbc.edu>
Subject: welcome.c
To: motteler@cs.umbc.edu
Date: Mon, 4 Dec 1995 12:07:45 -0500 (EST)
X-Mailer: ELM [version 2.4 PL22]
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length:        889
Status: RO

#include <stdio.h>
#include <stdlib.h>
#include <task.h>
#include <ulocks.h>

void welcome (char *msg);

int thread = 0;

int main (int argc, char *argv[])
{
  if (argc != 2)
     {
     fprintf (stderr, "Usage: %s num_threads\n", argv[0]);
     exit (EXIT_FAILURE);
     }

  /* Creating the threads */
  m_set_procs (atoi (argv[1]));

  /* Do the fork */
  if (m_fork (welcome, "Welcome to thread") != 0)
     {
     fprintf (stderr, "Could not m_fork() %s processes!\n", argv[1]);
     exit (EXIT_FAILURE);
     }

  /* Kill slave threads */
  m_kill_procs ();

  return (0);
}

void welcome (char *msg)
{
 int my_id = m_get_myid(); /* Get id of current thread */

 /* Busy wait until it's our turn */
 while (my_id != thread)
    ;

 /* Lock around critical I/O region */
 m_lock () ;
 printf("%s %d\n", msg, thread++);
 m_unlock () ;

 /* Wait for everyone to finish! */
 m_sync();
}

