When an instance reaches an Or-Split gateway, the original instance immediately flows to the corresponding Join gateway.
Then the Engine evaluates the Or-Split conditional transitions and for each transitions that evaluates to true. If none of the conditional transitions evaluated to true, then the Engine creates a thread for the unconditional transition.
If the Generate Independent Copies property of the Or-Split gateway is selected, the Or-Split gateway creates a copy of the instance for each of the threads of the Or-Split-Join circuit. If any of the threads modifies the instance data of the copies the other copies do not have access to the modified data. When the instance arrives to the Join gateway the Engine runs the associated PBL-Method, generally this method merges the data in the different copies and copies it to the original instance.
If the Generate Independent Copies property of the Or-Split gateway is not selected, the Engine tries to run the threads simultaneously. If one of the threads modifies the instance data the Engine locks the instance, so if another threads needs to access the instance data it has to wait until the Engine unlocks it. When the instance arrives to the Join gateway the Engine runs the associated PBL-Method. Because all the threads use the original instance it is not necessary to merge data in the Join gateway.