Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 Ind
[Top of Book] [Contents] [Previous Chapter] [Next Chapter]

[MathJax on]

9 Synchronization variables
9.1 Synchronization variables
9.1-1 CreateSyncVar
9.1-2 SyncWrite
9.1-3 SyncRead

### 9 Synchronization variables

#### 9.1 Synchronization variables

Synchronization variables (also often called dataflow variables in the literature) are variables that can be written only once; attempts to read the variable block until it has been written to.

Synchronization variables are created with `CreateSyncVar` (9.1-1), written with `SyncWrite` (9.1-2) and read with `SyncRead` (9.1-3).

    gap> sv := CreateSyncVar();;
    gap> RunAsyncTask(function()
    >      Sleep(10);
    >      SyncWrite(sv, MakeImmutable([1, 2, 3]));
    >    end);;
    gap> SyncRead(sv);
    [ 1, 2, 3 ]

##### 9.1-1 CreateSyncVar

`‣ CreateSyncVar`( ) | ( function )

The function `CreateSyncVar` takes no arguments. It returns a new synchronization variable. There is no need to deallocate it; the garbage collector will free the memory and all related resources when it is no longer accessible.

##### 9.1-2 SyncWrite

`‣ SyncWrite`( syncvar, obj ) | ( function )

`SyncWrite` attempts to assign the value obj to syncvar. If syncvar has been previously assigned a value, the call will fail with a runtime error; otherwise, obj will be assigned to syncvar.

In order to make sure that the recipient can read the result, the obj argument should not be a thread-local object; it should be public, read-only, or shared.

##### 9.1-3 SyncRead

`‣ SyncRead`( syncvar ) | ( function )

`SyncRead` reads the value previously assigned to syncvar with `SyncWrite` (9.1-2). If no value has been assigned yet, it blocks. It returns the assigned value.

[Top of Book] [Contents] [Previous Chapter] [Next Chapter]
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 Ind

generated by GAPDoc2HTML