Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- boolean blocked[2];
- int turn;
- void P(int id) {
- while(true) {
- blocked[id] = true;
- while(turn != id) {
- while(blocked[1-id])
- /* do nothing */;
- turn = id;
- }
- /* critical section */
- blocked[id] = false;
- /* remainder */
- }
- }
- void main() {
- blocked[0] = false;
- blocked[1] = false;
- turn = 0;
- parbegin(P(0), P(1)); //RUN P0 and P1 parallel
- }
- blocked = {false, false};
- turn = 0;
- blocked[id] = false; // Not yet executed.
- blocked {false, true}
- turn = 0;
- turn= 1;
- blocked = {false, false};
- P0: while (true) {
- P0: blocked[0] = true;
- P0: while (turn != 0) {
- P0: while (blocked[1]) {
- P0: }
- P1: while (true) {
- P1: blocked[1] = true;
- P1: while (turn != 1) {
- P1: }
- P1: criticalSection(P1);
- P0: turn = 0;
- P0: while (turn != 0)
- P0: }
- P0: critcalSection(P0);
- get blocked[0] -> false // cpu 0
- set blocked[0] = true // cpu 1 (stored in CPU 1's L1 cache)
- get blocked[0] -> false // cpu 0 (retrieved from CPU 0's L1 cache)
- get glocked[0] -> false // cpu 2 (retrieved from main memory)
Add Comment
Please, Sign In to add comment