| Line# | Code |
| 1 | proctype pThread() |
| 2 | { chan ret_chan = [0] of {int}; |
| 3 | mtype: process_event_t ev; mtype: process_data_t data; |
| 4 | PT_Assignment: pThread_params_chan ? -1,ev,data; // wait for running thread and assigning it to a process |
| 5 | if |
| 6 | ::ev==ASIGN_PTHREAD -> pThread_sync_chan ! _pid,0; |
| 7 | :: else -> goto PT_Assignment; fi; |
| 8 | PT_BEGIN: pThread_params_chan ? eval(_pid),ev,data;// wait for start process |
| 9 | if |
| 10 | :: ev==PROCESS_EVENT_INIT-> skip; |
| 11 | :: else -> goto PT_BEGIN; |
| 12 | fi; |
| 13 | PT_Statements: if |
| 14 | :: postRandomEvent(); |
| 15 | :: startRandomProcess(); |
| 16 | :: skip; |
| 17 | fi; |
| 18 | if |
| 19 | :: goto PT_WAIT; // wait for another event |
| 20 | :: goto PT_END; // termintation |
| 21 | :: goto PT_Statements; |
| 22 | fi; |
| 23 | PT_WAIT: // wait for an event |
| 24 | pThread_sync_chan ! _pid,PT_WAITING; |
| 25 | pThread_params_chan ? eval(_pid),ev,data // blocked |
| 26 | if |
| 27 | :: ev == PT_INIT -> goto PT_BEGIN; |
| 28 | :: else -> goto PT_Statements; |
| 29 | fi; |
| 30 | PT_END: if |
| 31 | ::pThread_sync_chan ! _pid,PT_ENDED; // termintation |
| 32 | ::pThread_sync_chan ! _pid,PT_EXITED;// termintation |
| 33 | fi; |
| 34 | goto PT_BEGIN; // for starting process again maybe in the future |
| 35 | } |
pThread proctype
×
https://people.iut.ac.ir/en/mahmoudzadeh/pthread-proctype?view=qrcode