<!--
{
  "availability" : [
    "iOS: 12.0.0 -",
    "iPadOS: 12.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.14.0 -",
    "tvOS: 12.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Metal",
  "identifier" : "/documentation/Metal/MTLSharedEvent",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Metal"
    ],
    "preciseIdentifier" : "c:objc(pl)MTLSharedEvent"
  },
  "title" : "MTLSharedEvent"
}
-->

# MTLSharedEvent

A type that synchronizes memory operations to one or more resources across multiple CPUs, GPUs, and processes.

```
protocol MTLSharedEvent : MTLEvent
```

## Overview

The [`MTLSharedEvent`](/documentation/Metal/MTLSharedEvent) protocol inherits the [`MTLEvent`](/documentation/Metal/MTLEvent) protocol.
An event can only synchronize memory operations that run on a single Metal device.
A shared event can synchronize memory operations across multiple Metal devices and the CPU.
Shared events work anywhere you can work with a regular event.

> Tip: Start with an ``doc://com.apple.metal/documentation/Metal/MTLEvent`` instance until you need to synchronize work with a task that runs on the
> CPU or another Metal device, because an ``doc://com.apple.metal/documentation/Metal/MTLSharedEvent`` can add overhead that may affect your app’s performance.

Create an [`MTLSharedEvent`](/documentation/Metal/MTLSharedEvent) by calling the [`makeSharedEvent()`](/documentation/Metal/MTLDevice/makeSharedEvent()) method of an [`MTLDevice`](/documentation/Metal/MTLDevice) instance.

To pass this event to another process:

1. Create a handle to the shared event by calling the [`makeSharedEventHandle()`](/documentation/Metal/MTLSharedEvent/makeSharedEventHandle()) method.
2. Transfer the handle to another process with XPC.
3. From the other process, call the [`makeSharedEvent(handle:)`](/documentation/Metal/MTLDevice/makeSharedEvent(handle:)) method.

For more information about shared events and synchronizing memory operations to resources, see:

- [Synchronizing events across multiple devices or processes](/documentation/Metal/synchronizing-events-across-multiple-devices-or-processes)
- [Synchronizing events between a GPU and the CPU](/documentation/Metal/synchronizing-events-between-a-gpu-and-the-cpu).
- [Resource synchronization](/documentation/Metal/resource-synchronization)

## Topics

### Synchronizing a shareable event

[`signaledValue`](/documentation/Metal/MTLSharedEvent/signaledValue)

The current signal value for the shareable event.

[`notify(_:atValue:block:)`](/documentation/Metal/MTLSharedEvent/notify(_:atValue:block:))

Schedules a notification handler to be called after the shareable event’s signal value equals or exceeds a given value.

### Creating a shared event handle

[`makeSharedEventHandle()`](/documentation/Metal/MTLSharedEvent/makeSharedEventHandle())

Creates a new shareable event handle.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)