!when alarm is set by wake_up.f90, this program breaks out

!of the DO loop, prints message (which wake_up.f90 has

!written to), and exits.

COMMON /shared_data/ alarm, message alarm = .FALSE.

!Wait for alarm to be set...

DO WHILE (alarm .EQ. .FALSE.)

!sleep(1) is an HP-UX system call that suspends a process

!for the number of seconds specified by the argument.

!The %VAL function tells Fortran that sleep expects its

!argument to be passed by value.

CALL sleep(%VAL(1))

END DO

!Message from wake.f90: PRINT *, message

!The shared memory segment is destroyed when this program halts.

END

IMPORTANT In the example above, you must use +U77to access the correct sleep in the Fortran library. If you use +U77, the line above:

CALL sleep (%VAL(1)) should instead read: CALL sleep (1)

nl

PROGRAM main

!This program, wake_up.f90, should be run just after its

!companion, go_to_sleep.f90, starts to execute but in a

!separate process. The $HP$ SHARED_COMMON directive

!enables both programs to share the same memory.

!Directive puts the common block in shared memory.

$SHARED_COMMON KEY=’scb1’ /shared_common/ LOGICAL :: alarm

CHARACTER(LEN=8) :: message

!Declare a named common block for shared memory. It must

!be laid out n exactly the same way in both programs. COMMON /shared_common/ alarm, message

!Write to message, sleep reads it.

message = "I'm up!"

!Set alarm to wake up sleep. alarm = .TRUE.

!The shared memory segment will now be detached.

!However, because go_to_sleep is still running,

!the segment will still be present in memory until

!it stops executing, too.

END

Following are the command lines to compile each program:

$ f90 -o go_to_sleep go_to_sleep.f $ f90 -o wake_up wake_up.f

Run the first program in any process by doing the following:

$ go_to_sleep

In another process, use the following command line to confirm that a shared memory segment has been created for the program (the last in the list is the newly created one):

$ ipcs -m

 

IPC status from /dev/kmem as of

Fri Mar 21 15:55:29 1997

T ID KEY MODE OWNER GROUP

 

Shared Memory:

 

m 0

0x4119c72b --rw-rw-rw- root

root

m 1

0x4e180002 --rw-rw-rw- root

root

m 2

0x41187bf4 --rw-rw-rw- root

root

m 3

0x00000000 --rw------- root

sys

m 7004 0x43186ea0 --rw-rw-rw- daemon daemon m 6005 0x73636231 --rw-rw-rw- ed lang

Sharing data among programs 73