initial commit. simple SUV done.

This commit is contained in:
Rajshekar K K 2025-01-09 13:11:46 +05:30
commit 85277edb62
6 changed files with 118 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*.out
*.o
*.swp

View File

@ -0,0 +1,2 @@
Monitor Synthesizer code goes here

2
README Normal file
View File

@ -0,0 +1,2 @@
Have a nice top-level makefile or bash / python scripts that evolves with each assignment

5
SUV/makefile Normal file
View File

@ -0,0 +1,5 @@
build_racy_logic: train_station_simulator_racy_logic.cpp
g++ train_station_simulator_racy_logic.cpp -o train_station_simulator_racy_logic.out
run_racy_logic: build_racy_logic
./train_station_simulator_racy_logic.out

View File

@ -0,0 +1,103 @@
#include<iostream>
#include<stdlib.h>
#include<pthread.h>
#include<time.h>
using namespace std;
void sleep_ms(unsigned long milliseconds)
{
struct timespec ts;
ts.tv_sec = milliseconds / 1000ul;
ts.tv_nsec = (milliseconds % 1000ul) * 1000000;
nanosleep(&ts, NULL);
}
// $TO_INSTRUMENT$
bool is_T0_running;
// $TO_INSTRUMENT$
bool is_T0_waiting_to_enter_station;
// $TO_INSTRUMENT$
bool is_T0_in_station;
// $TO_INSTRUMENT$
bool is_T1_running;
// $TO_INSTRUMENT$
bool is_T1_waiting_to_enter_station;
// $TO_INSTRUMENT$
bool is_T1_in_station;
void *train_logic(void *train_number)
{
int my_number = *(int *)train_number;
bool *is_T_running;
bool *is_T_in_station;
bool *is_T_waiting_to_enter_station;
if(my_number == 0)
{
is_T_running = &is_T0_running;
is_T_waiting_to_enter_station = &is_T0_waiting_to_enter_station;
is_T_in_station = &is_T0_in_station;
}
else if(my_number == 1)
{
is_T_running = &is_T1_running;
is_T_waiting_to_enter_station = &is_T1_waiting_to_enter_station;
is_T_in_station = &is_T1_in_station;
}
int num_station_visits = 0;
while(num_station_visits < 10)
/*
* Note that typically we study systems that run infinitely.
* However, for the sake of this laboratory study, we will
* study finite runs.
*/
{
//Run for some time in the range [3, 5] seconds. Running time in multiples of 100 milliseconds.
*is_T_running = true;
*is_T_in_station = false;
*is_T_waiting_to_enter_station = false;
cout << "train " << my_number << " : " << *is_T_running << " : " << *is_T_waiting_to_enter_station << " : " << *is_T_in_station << "\n";
sleep_ms(3000 + clock()%21 * 100);
//Wait to enter station
*is_T_running = false;
*is_T_in_station = false;
*is_T_waiting_to_enter_station = true;
cout << "train " << my_number << " : " << *is_T_running << " : " << *is_T_waiting_to_enter_station << " : " << *is_T_in_station << "\n";
//Stand in the station for 1 second
*is_T_running = false;
*is_T_in_station = true;
*is_T_waiting_to_enter_station = false;
cout << "train " << my_number << " : " << *is_T_running << " : " << *is_T_waiting_to_enter_station << " : " << *is_T_in_station << "\n";
sleep_ms(1000);
num_station_visits++;
}
return NULL;
}
int main()
{
pthread_t thread0, thread1;
int iret0, iret1;
int thread_number0 = 0, thread_number1 = 1;
iret0 = pthread_create(&thread0, NULL, train_logic, &thread_number0);
if(iret0)
{
fprintf(stderr,"Error - pthread_create() return code: %d\n",iret0);
exit(EXIT_FAILURE);
}
iret1 = pthread_create(&thread1, NULL, train_logic, &thread_number1);
if(iret1)
{
fprintf(stderr,"Error - pthread_create() return code: %d\n",iret1);
exit(EXIT_FAILURE);
}
pthread_join(thread0, NULL);
pthread_join(thread1, NULL);
exit(EXIT_SUCCESS);
}

View File

@ -0,0 +1,2 @@
Instrumentation Synthesizer code goes here