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