source: CIVL/mods/dev.civl.abc/examples/fortran/concurrency/BadDining.f

main
Last change on this file was aad342c, checked in by Stephen Siegel <siegel@…>, 3 years ago

Performing huge refactor to incorporate ABC, GMC, and SARL into CIVL repo and use Java modules.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5664 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.2 KB
Line 
1 PROGRAM BADDINING
2 PARAMETER (N=4)
3 COMMON /ALLFORK/ IPICKED,INOTPICKED,IDININGS,IFORKS(N)
4
5 IPICKED = 0
6 INOTPICKED = 1
7 IDININGS = 10
8
9 DO I = 1,N,1
10 IFORKS(I) = 1
11 ENDDO
12!$OMP PARALLEL PRIVATE (I)
13!$OMP DO
14 DO I = 1,N
15 CALL DINE(I)
16 END DO
17!$OMP END DO
18!$OMP END PARALLEL
19 END
20
21
22 SUBROUTINE DINE(X)
23 INTEGER L,R,X
24 PARAMETER (N=4)
25 COMMON /ALLFORK/ IPICKED,INOTPICKED,IDININGS,IFORKS(N)
26
27 L = X
28 R = IAND(X,3)+1
29 DO WHILE (.TRUE.)
30 DO WHILE (IFORKS(L) .EQ. IPICKED)
31 END DO
32 IFORKS(L) = IPICKED
33 PRINT *,'P(', X ,') is picking left fork '
34 DO WHILE (IFORKS(R) .EQ. IPICKED)
35 END DO
36 IFORKS(R) = IPICKED
37 PRINT *,'P(', X ,') is picking right fork '
38 IDININGS = IDININGS - 1
39 PRINT *,'P(', X ,') is dining '
40 IFORKS(L) = INOTPICKED
41 PRINT *,'P(', X ,') is putting down left fork '
42 IFORKS(R) = INOTPICKED
43 PRINT *,'P(', X ,') is putting down right fork '
44 END DO
45 END
Note: See TracBrowser for help on using the repository browser.