|
-
October 12th, 2011, 04:44 AM
#1
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() % 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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|