Creating Threads

Syntax

To create a thread under Solaris, use function thr_create(). Note that all thread related functions start with thr_. The syntax of thr_create() is:

int  thr_create(
          NULL,       /* use this default           */
          0,          /* use this default           */
          void *(*funct)(void *),  /* thread funct  */
          void *arg,  /* argument passed to funct() */
          0,          /* use default                */
          thread_t *ID);   /* use NULL works fine   */
Calling thr_thread() will create a child thread which will execute concurrently with the parent thread (i.e., the caller). The following is the meaning of each argument:

Example

Click here to download a copy of the following program.
#include  <stdio.h>
#include  <thread.h>

void *count(void *JunkPTR)
{
     int  *valuePTR = (int *) JunkPTR;  /* convert to integer ptr.  */
     int  value     = *valuePTR;        /* then take the value      */

     printf("Child: value = %d\n", value);
}

void  main(void)
{
     thread_t  ID1, ID2;                /* for thread IDs                  */
     int       v1 = 1;                  /* argument for the 1st thr */
     int       v2 = 2;                  /* argument for the 2nd thr */

     thr_create(NULL, 0, count, (void *) (&v1), 0, &ID1);
     thr_create(NULL, 0, count, (void *) (&v2), 0, &ID2);
     printf("Parent\n");
     sleep(2);                          /* why is sleep() here?     */
}

The following diagram shows the three concurrently executing threads, one parent (i.e., the main program) and two children (i.e., the two copies of count()).