CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 5 of 5

Threaded View

  1. #1
    Join Date
    Sep 2011
    Posts
    2

    Semaphore trouble

    I got my program to compile but i keep getting as segmentation fault when i try to run it can someone please point me in the right direction.

    Code:
    #include  <stdio.h>
    #include  <iostream>
    #include  <stdlib.h>
    #include  <sys/types.h>
    #include  <fcntl.h>
    #include  <unistd.h>
    #include <errno.h>
    #include <time.h>
    #include <string>
    #include <ctime>
    #include "/home/classes/cs3270ZIM/Lib/semaphore.h"
    
     using namespace std;
    
    int main(int argc, char **argv)
    {
     int pid;
     int randomnums , whogoesfirst, oldnumber, newnumber;
     time_t Btime1, Btime2, Etime1, Etime2; // time pointers
     Semaphore semaphore(123, 2);
     semaphore.Init(0,1);
     semaphore.Init(1,99);
     srand(time(NULL));// random number seed
     randomnums = atoi( argv[1] );
     whogoesfirst = atoi( argv[2] );
     pid = fork();// process forking in two
     if (pid == 0)// Child  process
        {
         time( &Btime1);// process start time 
         if(whogoesfirst==0) // the parent goes first
         {
           for(int index = 0; index < randomnums; index++) // random number loop
            {
            semaphore.Wait(0);
            semaphore.Wait(0);
            oldnumber = semaphore.ReadValue(1);
            newnumber=rand() &#37; 100;
            cout << "child:" << " OldNumber: " << oldnumber << "NewNumber: " << newnumber<< endl;
            semaphore.Signal(0);
            semaphore.Init(1,newnumber);
            }
           
    
          }
          else // child first
          {
           for(int index = 0; index < randomnums; index++) // random number loop
            {
              oldnumber=semaphore.ReadValue(1);
              newnumber=rand() % 100;
              cout << "child:" << " OldNumber: " << oldnumber << "NewNumber: " << newnumber << endl;
              semaphore.Signal(0);
              sleep(5);
              semaphore.Wait(0);
            }
          }
          time( &Etime1);// process end time
          cout << "\n I am the child; my ID = " << getpid() << "Begin Time: " << ctime (&Btime1)<< "End Time: " << ctime (&Etime1) << endl;
        }
    
     else
        { // Parent process
         time( &Btime2); // process start time
         srand(time(NULL)); //random seeding based on current time
         if(whogoesfirst==1) //child first
         {
          for(int count = 0; count < randomnums; count++)// random number loop
          {
           oldnumber=semaphore.ReadValue(1);
           newnumber=rand() % 100;
           cout << "parent:" << " OldNumber: " << oldnumber << "NewNumber: " << newnumber << endl;
           semaphore.Wait(0);
          }
         }
         else //parent first
         {
          for(int index = 0; index < randomnums; index++) // random number loop
            {
              oldnumber=semaphore.ReadValue(1);
              newnumber=rand() % 100;
              cout << "parent:" << " OldNumber: " << oldnumber << "NewNumber: " << newnumber << endl;
              semaphore.Signal(0);
              sleep(5);
              semaphore.Wait(0);
            }
         }
         time( &Etime2);// process end time
         cout << "\n I am the parent; my ID = " << getpid() << "Begin Time: " << ctime (&Btime2)<< "End Time: " << ctime (&Etime2) << endl;
          
        }
    }
    You can delete this post i solved my problem.
    Last edited by nakeo; October 12th, 2011 at 07:32 AM. Reason: fixed my problem

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured