Dikkate alınması gereken ana bilgisayara (host) özgü senkronizasyon olaylarına örnek olarak şunlar verilebilir: bir SharedArrayBuffer'ın bir aracıdan (agent) diğerine gönderilmesi (örneğin, bir tarayıcıda postMessage ile), aracıların (agents) başlatılması ve durdurulması ve aracı kümesi (agent cluster) içinde paylaşılan bellek dışındaki kanallar aracılığıyla iletişim kurulması. Belirli bir execution yürütmesi için bu olaylar, ana bilgisayar (host) tarafından host-synchronizes-with kesin kısmi sıralaması (strict partial order) aracılığıyla sağlanır. Ek olarak, ana bilgisayarlar (hosts), is-agent-order-before ilişkisine (Relation) katılmak üzere execution.[[EventList]] listesine ana bilgisayara (host) özgü senkronizasyon olayları ekleyebilir.
Olaylar, aday yürütmeler (candidate executions) içinde aşağıda tanımlanan ilişkilerle sıralanır.
#29.2 Aracı Olayları Kayıtları (Agent Events Records)
Bir Aracı Olayları Kaydı (Agent Events Record), aşağıdaki alanlara sahip bir Kayıttır (Record).
Tablo 95: Aracı Olayları Kaydı Alanları
#29.3 Seçilen Değer Kayıtları (Chosen Value Records)
Bir Seçilen Değer Kaydı (Chosen Value Record), aşağıdaki alanlara sahip bir Kayıttır (Record).
Tablo 96: Seçilen Değer Kaydı Alanları
#29.4 Aday Yürütmeler (Candidate Executions)
Bir aracı kümesinin (agent cluster) değerlendirmesinin bir aday yürütmesi (candidate execution), aşağıdaki alanlara sahip bir Kayıttır (Record).
Tablo 97: Aday Yürütme Kaydı Alanları
Boş bir aday yürütme, alanları boş Listeler (Lists) olan bir aday yürütme Kaydıdır (Record).
#29.5 Bellek Modeli için Soyut İşlemler (Abstract Operations for the Memory Model)
#29.5.1 EventSet ( execution )
EventSet soyut işlemi; execution (bir aday yürütme) argümanını alır ve Bellek olaylarının (Memory events) bir Kümesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
events, boş bir Küme olsun.
execution.[[EventsRecords]] listesindeki her bir Aracı Olayları Kaydı (Agent Events Record) aer için sırayla yap:
aer.[[EventList]] listesindeki her bir Bellek olayı (Memory event) event için sırayla yap:
- events kümesine event ekle.
events döndür.
#29.5.2 SharedDataBlockEventSet ( execution )
SharedDataBlockEventSet soyut işlemi; execution (bir aday yürütme) argümanını alır ve Paylaşılan Veri Bloğu olaylarının (Shared Data Block events) bir Kümesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
events, boş bir Küme olsun.
EventSet(execution) kümesindeki her bir Bellek olayı (Memory event) event için sırayla yap:
- Eğer event bir Paylaşılan Veri Bloğu olayıysa, events kümesine event ekle.
events döndür.
#29.5.3 HostEventSet ( execution )
HostEventSet soyut işlemi; execution (bir aday yürütme) argümanını alır ve Bellek olaylarının (Memory events) bir Kümesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
- EventSet(execution) kümesinde bulunan ve SharedDataBlockEventSet(execution) içinde bulunmayan tüm elemanları içeren yeni bir Küme döndür.
ComposeWriteEventBytes soyut işlemi; execution (bir aday yürütme), byteIndex (negatif olmayan bir tamsayı (integer)) ve writes (ya WriteSharedMemory ya da ReadModifyWriteSharedMemory olaylarının bir Listesi (List)) argümanlarını alır ve bayt değerlerinin (byte values) bir Listesini (List) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
byteLocation, byteIndex olsun.
bytesRead, yeni ve boş bir Liste (List) olsun.
writes listesindeki her bir writeEvent elemanı için sırayla yap:
Assert: writeEvent olayı, kendi bellek aralığında (memory range) byteLocation adresine sahiptir.
payloadIndex, byteLocation - writeEvent.[[ByteIndex]] olsun.
Eğer writeEvent bir WriteSharedMemory olayı ise, o zaman
- byte, writeEvent.[[Payload]][payloadIndex] olsun.
Değilse,
Assert: writeEvent bir ReadModifyWriteSharedMemory olayıdır.
bytes, ValueOfReadEvent(execution, writeEvent) olsun.
bytesModified, writeEvent.[[ModifyOp]](bytes, writeEvent.[[Payload]]) olsun.
byte, bytesModified[payloadIndex] olsun.
bytesRead listesine byte ekle.
byteLocation değerini byteLocation + 1 olarak ayarla.
bytesRead döndür.