SYNCHRONIZED clause

The SYNCHRONIZED clause specifies the alignment of an elementary item on a natural boundary in storage.

Format

Read syntax diagramSkip visual syntax diagramSYNCHRONIZEDSYNCLEFTRIGHT

SYNC is an abbreviation for SYNCHRONIZED and has the same meaning.

The SYNCHRONIZED clause is never required, but can improve performance on some systems for binary items used in arithmetic.

The SYNCHRONIZED clause can be specified for elementary items and for level-01 group items, in which case every elementary item within the group item is synchronized.

LEFT
Specifies that the elementary item is to be positioned so that it will begin at the left character position of the natural boundary in which the elementary item is placed.
RIGHT
Specifies that the elementary item is to be positioned such that it will terminate on the right character position of the natural boundary in which it has been placed.

When specified, the LEFT and the RIGHT phrases are syntax checked but have no effect on the execution of the program.

The length of an elementary item is not affected by the SYNCHRONIZED clause.

The following table lists the effect of the SYNCHRONIZE clause on other language elements.

Table 1. SYNCHRONIZE clause effect on other language elements
Language element Comments
OCCURS clause When specified for an item within the scope of an OCCURS clause, each occurrence of the item is synchronized.
USAGE DISPLAY or PACKED-DECIMAL Each item is syntax checked, but the SYNCHRONIZED clause has no effect on execution.
USAGE NATIONAL Each item is syntax checked, but the SYNCHRONIZED clause has no effect on execution.
USAGE BINARY or COMPUTATIONAL When the item is the first elementary item subordinate to an item that contains a REDEFINES clause, the item must not require the addition of unused character positions.

When the synchronized clause is not specified for a subordinate data item (one with a level number of 02 through 49):

  • The item is aligned at a displacement that is a multiple of 2 relative to the beginning of the record if its USAGE is BINARY and its PICTURE is in the range of S9 through S9(4).
  • The item is aligned at a displacement that is a multiple of 4 relative to the beginning of the record if its USAGE is BINARY and its PICTURE is in the range of S9(5) through S9(18), or its USAGE is INDEX.

When SYNCHRONIZED is not specified for binary items, no space is reserved for slack bytes.

Start of changeUSAGE POINTER, PROCEDURE-POINTER, FUNCTION-POINTER, OBJECT REFERENCE, INDEXEnd of change The data is aligned on a fullword boundaryStart of change when the LP(32) compiler option is in effectEnd of change.

Start of changeThe data is aligned on a doubleword boundary when the LP(64) compiler option is in effect.End of change

USAGE COMPUTATIONAL-1 The data is aligned on a fullword boundary.
USAGE COMPUTATIONAL-2 The data is aligned on a doubleword boundary.
USAGE COMPUTATIONAL-3 The data is treated the same as the SYNCHRONIZED clause for a PACKED-DECIMAL item.
USAGE COMPUTATIONAL-4 The data is treated the same as the SYNCHRONIZED clause for a COMPUTATIONAL item.
USAGE COMPUTATIONAL-5 The data is treated the same as the SYNCHRONIZED clause for a COMPUTATIONAL item.
Start of changeUSAGE UTF-8End of change Start of changeEach item is syntax checked, but the SYNCHRONIZED clause has no effect on execution.End of change
DBCS and external floating-point items Each item is syntax checked, but the SYNCHRONIZED clause has no effect on execution.
REDEFINES clause For an item that contains a REDEFINES clause, the data item that is redefined must have the proper boundary alignment for the data item that redefines it. For example, if you write the following, be sure that data item A begins on a fullword boundary:

02 A              PICTURE X(4).
02 B REDEFINES A  PICTURE S9(9) BINARY SYNC.

In the FILE SECTION, the compiler assumes that all level-01 records that contain SYNCHRONIZED items are aligned on doubleword boundaries in the buffer. You must provide the necessary slack bytes between records to ensure alignment when there are multiple records in a block.

In the WORKING-STORAGE SECTION, the compiler aligns all level-01 entries on a doubleword boundary.

For the purposes of aligning binary items in the LINKAGE SECTION, all level-01 items are assumed to begin on doubleword boundaries. Therefore, if you issue a CALL statement, such operands of any USING phrase within it must be aligned correspondingly.