I set 3 tasks,namely MAIN which is the forground task for other task BACK1 which is again forground task for BACK2. I used a semaphore WaitUntil TestAndSet(tproutine_inuse) in every tasks.Then I put some lines of codes to print three sentences each in every task inside a while loop.When I execute the 3 tasks at the same time in continues cycle, then only the MAIN task is working.Why it is happening?In single cycle each task is working?
I need to know whether loops will work in forground background tasks in RAPID and is there any chance of deadlocks or preemption in RAPID programs.If so, will you please provide a reference manual for the examples of deadlocks or multithreading or concurrent programming in RAPID language. Given below are my three simple tasks.
MODULE MAIN
VAR num i;
PERS bool tproutine_inuse := FALSE;
PROC main()
WaitUntil TestAndSet(tproutine_inuse);
WHILE(i<=2) DO
TPWrite “First line from MAIN”;
TPWrite “Second line from MAIN”;
TPWrite “Third line from MAIN”;
tproutine_inuse := FALSE;
ENDWHILE
ENDPROC
ENDMODULE
MODULE BACK1
VAR num j;
PERS bool tproutine_inuse := FALSE;
PROC main()
WaitUntil TestAndSet(tproutine_inuse);
WHILE(j<=2) DO
TPWrite “First line from BACK1”;
TPWrite “Second line from BACK1”;
TPWrite “Third line from BACK1”;
tproutine_inuse := FALSE;
ENDWHILE
ENDPROC
ENDMODULE
MODULE MAIN
VAR num k;
PERS bool tproutine_inuse := FALSE;
PROC main()
WaitUntil TestAndSet(tproutine_inuse);
WHILE(k<=2) DO
TPWrite “First line from BACK2”;
TPWrite “Second line from BACK2”;
TPWrite “Third line from BACK2”;
tproutine_inuse := FALSE;
ENDWHILE
ENDPROC
ENDMODULE