pub unsafe auto trait MaybeSync { }
Expand description
Types for which it is safe to share references between threads.
This trait is automatically implemented when the compiler determines it’s appropriate.
The precise definition is: a type T
is Sync
if and only if &T
is
Send
. In other words, if there is no possibility of
undefined behavior (including data races) when passing
&T
references between threads.
As one would expect, primitive types like u8
and f64
are all Sync
, and so are simple aggregate types containing them,
like tuples, structs and enums. More examples of basic Sync
types include “immutable” types like &T
, and those with simple
inherited mutability, such as Box<T>
, Vec<T>
and
most other collection types. (Generic parameters need to be Sync
for their container to be Sync
.)
A somewhat surprising consequence of the definition is that &mut T
is Sync
(if T
is Sync
) even though it seems like that might
provide unsynchronized mutation. The trick is that a mutable
reference behind a shared reference (that is, & &mut T
)
becomes read-only, as if it were a & &T
. Hence there is no risk
of a data race.
A shorter overview of how Sync
and Send
relate to referencing:
&T
isSend
if and only ifT
isSync
&mut T
isSend
if and only ifT
isSend
&T
and&mut T
areSync
if and only ifT
isSync
Types that are not Sync
are those that have “interior
mutability” in a non-thread-safe form, such as Cell
and RefCell
. These types allow for mutation of
their contents even through an immutable, shared reference. For
example the set
method on Cell<T>
takes &self
, so it requires
only a shared reference &Cell<T>
. The method performs no
synchronization, thus Cell
cannot be Sync
.
Another example of a non-Sync
type is the reference-counting
pointer Rc
. Given any reference &Rc<T>
, you can clone
a new Rc<T>
, modifying the reference counts in a non-atomic way.
For cases when one does need thread-safe interior mutability,
Rust provides atomic data types, as well as explicit locking via
sync::Mutex
and sync::RwLock
. These types
ensure that any mutation cannot cause data races, hence the types
are Sync
. Likewise, sync::Arc
provides a thread-safe
analogue of Rc
.
Any types with interior mutability must also use the
cell::UnsafeCell
wrapper around the value(s) which
can be mutated through a shared reference. Failing to doing this is
undefined behavior. For example, transmute
-ing
from &T
to &mut T
is invalid.
See the Nomicon for more details about Sync
.
Implementors§
impl !Sync for Arguments<'_>
impl !Sync for LocalWaker
impl !Sync for Args
impl !Sync for ArgsOs
impl Sync for rustjs::deno_core::futures::task::AtomicWaker
impl Sync for Waker
impl Sync for GuardNoSend
impl Sync for rustjs::deno_core::serde_v8::ExternalPointer
impl Sync for CompiledWasmModule
impl Sync for ExternalReferences
impl Sync for OneByteConst
impl Sync for ResourceToBodyAdapter
impl Sync for Env
impl Sync for InterruptHandle
impl Sync for alloc::string::Drain<'_>
impl Sync for AtomicBool
impl Sync for AtomicI8
impl Sync for AtomicI16
impl Sync for AtomicI32
impl Sync for AtomicI64
impl Sync for AtomicIsize
impl Sync for AtomicU8
impl Sync for AtomicU16
impl Sync for AtomicU32
impl Sync for AtomicU64
impl Sync for AtomicUsize
impl Sync for AmdGpaInterfaceFn
impl Sync for ash::vk::definitions::CommandBuffer
impl Sync for ash::vk::definitions::Device
impl Sync for ash::vk::definitions::Instance
impl Sync for PhysicalDevice
impl Sync for Queue
impl Sync for AmdBufferMarkerFn
impl Sync for AmdDeviceCoherentMemoryFn
impl Sync for AmdDisplayNativeHdrFn
impl Sync for AmdDrawIndirectCountFn
impl Sync for AmdExtension17Fn
impl Sync for AmdExtension18Fn
impl Sync for AmdExtension20Fn
impl Sync for AmdExtension32Fn
impl Sync for AmdExtension33Fn
impl Sync for AmdExtension35Fn
impl Sync for AmdExtension44Fn
impl Sync for AmdExtension46Fn
impl Sync for AmdExtension134Fn
impl Sync for AmdExtension135Fn
impl Sync for AmdExtension136Fn
impl Sync for AmdExtension140Fn
impl Sync for AmdExtension142Fn
impl Sync for AmdExtension143Fn
impl Sync for AmdExtension183Fn
impl Sync for AmdExtension187Fn
impl Sync for AmdExtension229Fn
impl Sync for AmdExtension231Fn
impl Sync for AmdExtension232Fn
impl Sync for AmdExtension233Fn
impl Sync for AmdExtension234Fn
impl Sync for AmdExtension236Fn
impl Sync for AmdExtension314Fn
impl Sync for AmdExtension316Fn
impl Sync for AmdExtension318Fn
impl Sync for AmdExtension319Fn
impl Sync for AmdExtension320Fn
impl Sync for AmdExtension470Fn
impl Sync for AmdExtension471Fn
impl Sync for AmdExtension472Fn
impl Sync for AmdExtension473Fn
impl Sync for AmdExtension474Fn
impl Sync for AmdExtension475Fn
impl Sync for AmdExtension476Fn
impl Sync for AmdExtension477Fn
impl Sync for AmdExtension478Fn
impl Sync for AmdExtension479Fn
impl Sync for AmdGcnShaderFn
impl Sync for AmdGpuShaderHalfFloatFn
impl Sync for AmdGpuShaderInt16Fn
impl Sync for AmdMemoryOverallocationBehaviorFn
impl Sync for AmdMixedAttachmentSamplesFn
impl Sync for AmdNegativeViewportHeightFn
impl Sync for AmdPipelineCompilerControlFn
impl Sync for AmdRasterizationOrderFn
impl Sync for AmdShaderBallotFn
impl Sync for AmdShaderCoreProperties2Fn
impl Sync for AmdShaderCorePropertiesFn
impl Sync for AmdShaderEarlyAndLateFragmentTestsFn
impl Sync for AmdShaderExplicitVertexParameterFn
impl Sync for AmdShaderFragmentMaskFn
impl Sync for AmdShaderImageLoadStoreLodFn
impl Sync for AmdShaderInfoFn
impl Sync for AmdShaderTrinaryMinmaxFn
impl Sync for AmdTextureGatherBiasLodFn
impl Sync for AndroidExtension469Fn
impl Sync for AndroidExternalMemoryAndroidHardwareBufferFn
impl Sync for AndroidNativeBufferFn
impl Sync for ArmExtension344Fn
impl Sync for ArmExtension418Fn
impl Sync for ArmExtension424Fn
impl Sync for ArmExtension425Fn
impl Sync for ArmExtension453Fn
impl Sync for ArmRasterizationOrderAttachmentAccessFn
impl Sync for ArmShaderCoreBuiltinsFn
impl Sync for ArmShaderCorePropertiesFn
impl Sync for BrcmExtension264Fn
impl Sync for BrcmExtension265Fn
impl Sync for CoreaviExtension442Fn
impl Sync for CoreaviExtension443Fn
impl Sync for CoreaviExtension444Fn
impl Sync for CoreaviExtension445Fn
impl Sync for CoreaviExtension446Fn
impl Sync for CoreaviExtension447Fn
impl Sync for Ext4444FormatsFn
impl Sync for ExtAcquireDrmDisplayFn
impl Sync for ExtAcquireXlibDisplayFn
impl Sync for ExtAstcDecodeModeFn
impl Sync for ExtAttachmentFeedbackLoopDynamicStateFn
impl Sync for ExtAttachmentFeedbackLoopLayoutFn
impl Sync for ExtBlendOperationAdvancedFn
impl Sync for ExtBorderColorSwizzleFn
impl Sync for ExtBufferDeviceAddressFn
impl Sync for ExtCalibratedTimestampsFn
impl Sync for ExtColorWriteEnableFn
impl Sync for ExtConditionalRenderingFn
impl Sync for ExtConservativeRasterizationFn
impl Sync for ExtCustomBorderColorFn
impl Sync for ExtDebugMarkerFn
impl Sync for ExtDebugReportFn
impl Sync for ExtDebugUtilsFn
impl Sync for ExtDepthClampZeroOneFn
impl Sync for ExtDepthClipControlFn
impl Sync for ExtDepthClipEnableFn
impl Sync for ExtDepthRangeUnrestrictedFn
impl Sync for ExtDescriptorBufferFn
impl Sync for ExtDescriptorIndexingFn
impl Sync for ExtDeviceAddressBindingReportFn
impl Sync for ExtDeviceFaultFn
impl Sync for ExtDeviceMemoryReportFn
impl Sync for ExtDirectModeDisplayFn
impl Sync for ExtDirectfbSurfaceFn
impl Sync for ExtDiscardRectanglesFn
impl Sync for ExtDisplayControlFn
impl Sync for ExtDisplaySurfaceCounterFn
impl Sync for ExtDynamicRenderingUnusedAttachmentsFn
impl Sync for ExtExtendedDynamicState2Fn
impl Sync for ExtExtendedDynamicState3Fn
impl Sync for ExtExtendedDynamicStateFn
impl Sync for ExtExtension28Fn
impl Sync for ExtExtension160Fn
impl Sync for ExtExtension177Fn
impl Sync for ExtExtension220Fn
impl Sync for ExtExtension223Fn
impl Sync for ExtExtension259Fn
impl Sync for ExtExtension267Fn
impl Sync for ExtExtension284Fn
impl Sync for ExtExtension289Fn
impl Sync for ExtExtension313Fn
impl Sync for ExtExtension359Fn
impl Sync for ExtExtension360Fn
impl Sync for ExtExtension362Fn
impl Sync for ExtExtension363Fn
impl Sync for ExtExtension376Fn
impl Sync for ExtExtension384Fn
impl Sync for ExtExtension388Fn
impl Sync for ExtExtension390Fn
impl Sync for ExtExtension391Fn
impl Sync for ExtExtension420Fn
impl Sync for ExtExtension437Fn
impl Sync for ExtExtension457Fn
impl Sync for ExtExtension458Fn
impl Sync for ExtExtension461Fn
impl Sync for ExtExtension462Fn
impl Sync for ExtExtension468Fn
impl Sync for ExtExtension480Fn
impl Sync for ExtExtension481Fn
impl Sync for ExtExtension484Fn
impl Sync for ExtExtension487Fn
impl Sync for ExtExtension488Fn
impl Sync for ExtExtension496Fn
impl Sync for ExtExtension497Fn
impl Sync for ExtExtension501Fn
impl Sync for ExtExtension502Fn
impl Sync for ExtExtension503Fn
impl Sync for ExtExtension505Fn
impl Sync for ExtExtension508Fn
impl Sync for ExtExtension509Fn
impl Sync for ExtExtension512Fn
impl Sync for ExtExtension517Fn
impl Sync for ExtExtension523Fn
impl Sync for ExtExtension524Fn
impl Sync for ExtExtension526Fn
impl Sync for ExtExtension527Fn
impl Sync for ExtExtension528Fn
impl Sync for ExtExternalMemoryDmaBufFn
impl Sync for ExtExternalMemoryHostFn
impl Sync for ExtFilterCubicFn
impl Sync for ExtFragmentDensityMap2Fn
impl Sync for ExtFragmentDensityMapFn
impl Sync for ExtFragmentShaderInterlockFn
impl Sync for ExtFullScreenExclusiveFn
impl Sync for ExtGlobalPriorityFn
impl Sync for ExtGlobalPriorityQueryFn
impl Sync for ExtGraphicsPipelineLibraryFn
impl Sync for ExtHdrMetadataFn
impl Sync for ExtHeadlessSurfaceFn
impl Sync for ExtHostQueryResetFn
impl Sync for ExtImage2dViewOf3dFn
impl Sync for ExtImageCompressionControlFn
impl Sync for ExtImageCompressionControlSwapchainFn
impl Sync for ExtImageDrmFormatModifierFn
impl Sync for ExtImageRobustnessFn
impl Sync for ExtImageSlicedViewOf3dFn
impl Sync for ExtImageViewMinLodFn
impl Sync for ExtIndexTypeUint8Fn
impl Sync for ExtInlineUniformBlockFn
impl Sync for ExtLegacyDitheringFn
impl Sync for ExtLineRasterizationFn
impl Sync for ExtLoadStoreOpNoneFn
impl Sync for ExtMemoryBudgetFn
impl Sync for ExtMemoryPriorityFn
impl Sync for ExtMeshShaderFn
impl Sync for ExtMetalObjectsFn
impl Sync for ExtMetalSurfaceFn
impl Sync for ExtMultiDrawFn
impl Sync for ExtMultisampledRenderToSingleSampledFn
impl Sync for ExtMutableDescriptorTypeFn
impl Sync for ExtNonSeamlessCubeMapFn
impl Sync for ExtOpacityMicromapFn
impl Sync for ExtPageableDeviceLocalMemoryFn
impl Sync for ExtPciBusInfoFn
impl Sync for ExtPhysicalDeviceDrmFn
impl Sync for ExtPipelineCreationCacheControlFn
impl Sync for ExtPipelineCreationFeedbackFn
impl Sync for ExtPipelineLibraryGroupHandlesFn
impl Sync for ExtPipelinePropertiesFn
impl Sync for ExtPipelineProtectedAccessFn
impl Sync for ExtPipelineRobustnessFn
impl Sync for ExtPostDepthCoverageFn
impl Sync for ExtPrimitiveTopologyListRestartFn
impl Sync for ExtPrimitivesGeneratedQueryFn
impl Sync for ExtPrivateDataFn
impl Sync for ExtProvokingVertexFn
impl Sync for ExtQueueFamilyForeignFn
impl Sync for ExtRasterizationOrderAttachmentAccessFn
impl Sync for ExtRgba10x6FormatsFn
impl Sync for ExtRobustness2Fn
impl Sync for ExtSampleLocationsFn
impl Sync for ExtSamplerFilterMinmaxFn
impl Sync for ExtScalarBlockLayoutFn
impl Sync for ExtSeparateStencilUsageFn
impl Sync for ExtShaderAtomicFloat2Fn
impl Sync for ExtShaderAtomicFloatFn
impl Sync for ExtShaderDemoteToHelperInvocationFn
impl Sync for ExtShaderImageAtomicInt64Fn
impl Sync for ExtShaderModuleIdentifierFn
impl Sync for ExtShaderObjectFn
impl Sync for ExtShaderStencilExportFn
impl Sync for ExtShaderSubgroupBallotFn
impl Sync for ExtShaderSubgroupVoteFn
impl Sync for ExtShaderTileImageFn
impl Sync for ExtShaderViewportIndexLayerFn
impl Sync for ExtSubgroupSizeControlFn
impl Sync for ExtSubpassMergeFeedbackFn
impl Sync for ExtSurfaceMaintenance1Fn
impl Sync for ExtSwapchainColorspaceFn
impl Sync for ExtSwapchainMaintenance1Fn
impl Sync for ExtTexelBufferAlignmentFn
impl Sync for ExtTextureCompressionAstcHdrFn
impl Sync for ExtToolingInfoFn
impl Sync for ExtTransformFeedbackFn
impl Sync for ExtValidationCacheFn
impl Sync for ExtValidationFeaturesFn
impl Sync for ExtValidationFlagsFn
impl Sync for ExtVertexAttributeDivisorFn
impl Sync for ExtVertexInputDynamicStateFn
impl Sync for ExtVideoEncodeH264Fn
impl Sync for ExtVideoEncodeH265Fn
impl Sync for ExtYcbcr2plane444FormatsFn
impl Sync for ExtYcbcrImageArraysFn
impl Sync for FbExtension402Fn
impl Sync for FbExtension403Fn
impl Sync for FbExtension404Fn
impl Sync for FuchsiaBufferCollectionFn
impl Sync for FuchsiaExtension364Fn
impl Sync for FuchsiaExtension368Fn
impl Sync for FuchsiaExternalMemoryFn
impl Sync for FuchsiaExternalSemaphoreFn
impl Sync for FuchsiaImagepipeSurfaceFn
impl Sync for GgpExtension263Fn
impl Sync for GgpExtension407Fn
impl Sync for GgpExtension408Fn
impl Sync for GgpExtension409Fn
impl Sync for GgpExtension410Fn
impl Sync for GgpExtension411Fn
impl Sync for GgpFrameTokenFn
impl Sync for GgpStreamDescriptorSurfaceFn
impl Sync for GoogleDecorateStringFn
impl Sync for GoogleDisplayTimingFn
impl Sync for GoogleExtension49Fn
impl Sync for GoogleExtension194Fn
impl Sync for GoogleExtension195Fn
impl Sync for GoogleExtension217Fn
impl Sync for GoogleExtension386Fn
impl Sync for GoogleExtension454Fn
impl Sync for GoogleExtension455Fn
impl Sync for GoogleHlslFunctionality1Fn
impl Sync for GoogleSurfacelessQueryFn
impl Sync for GoogleUserTypeFn
impl Sync for HuaweiClusterCullingShaderFn
impl Sync for HuaweiExtension406Fn
impl Sync for HuaweiExtension415Fn
impl Sync for HuaweiInvocationMaskFn
impl Sync for HuaweiSubpassShadingFn
impl Sync for ImgExtension107Fn
impl Sync for ImgExtension108Fn
impl Sync for ImgExtension111Fn
impl Sync for ImgFilterCubicFn
impl Sync for ImgFormatPvrtcFn
impl Sync for IntelExtension243Fn
impl Sync for IntelExtension271Fn
impl Sync for IntelExtension273Fn
impl Sync for IntelPerformanceQueryFn
impl Sync for IntelShaderIntegerFunctions2Fn
impl Sync for JuiceExtension399Fn
impl Sync for JuiceExtension400Fn
impl Sync for Khr8bitStorageFn
impl Sync for Khr16bitStorageFn
impl Sync for KhrAccelerationStructureFn
impl Sync for KhrAndroidSurfaceFn
impl Sync for KhrBindMemory2Fn
impl Sync for KhrBufferDeviceAddressFn
impl Sync for KhrCopyCommands2Fn
impl Sync for KhrCreateRenderpass2Fn
impl Sync for KhrDedicatedAllocationFn
impl Sync for KhrDeferredHostOperationsFn
impl Sync for KhrDepthStencilResolveFn
impl Sync for KhrDescriptorUpdateTemplateFn
impl Sync for KhrDeviceGroupCreationFn
impl Sync for KhrDeviceGroupFn
impl Sync for KhrDisplayFn
impl Sync for KhrDisplaySwapchainFn
impl Sync for KhrDrawIndirectCountFn
impl Sync for KhrDriverPropertiesFn
impl Sync for KhrDynamicRenderingFn
impl Sync for KhrExtension119Fn
impl Sync for KhrExtension209Fn
impl Sync for KhrExtension221Fn
impl Sync for KhrExtension280Fn
impl Sync for KhrExtension297Fn
impl Sync for KhrExtension299Fn
impl Sync for KhrExtension325Fn
impl Sync for KhrExtension335Fn
impl Sync for KhrExtension350Fn
impl Sync for KhrExtension358Fn
impl Sync for KhrExtension380Fn
impl Sync for KhrExtension381Fn
impl Sync for KhrExtension417Fn
impl Sync for KhrExtension435Fn
impl Sync for KhrExtension507Fn
impl Sync for KhrExtension513Fn
impl Sync for KhrExtension514Fn
impl Sync for KhrExtension515Fn
impl Sync for KhrExtension516Fn
impl Sync for KhrExtension529Fn
impl Sync for KhrExtension532Fn
impl Sync for KhrExternalFenceCapabilitiesFn
impl Sync for KhrExternalFenceFdFn
impl Sync for KhrExternalFenceFn
impl Sync for KhrExternalFenceWin32Fn
impl Sync for KhrExternalMemoryCapabilitiesFn
impl Sync for KhrExternalMemoryFdFn
impl Sync for KhrExternalMemoryFn
impl Sync for KhrExternalMemoryWin32Fn
impl Sync for KhrExternalSemaphoreCapabilitiesFn
impl Sync for KhrExternalSemaphoreFdFn
impl Sync for KhrExternalSemaphoreFn
impl Sync for KhrExternalSemaphoreWin32Fn
impl Sync for KhrFormatFeatureFlags2Fn
impl Sync for KhrFragmentShaderBarycentricFn
impl Sync for KhrFragmentShadingRateFn
impl Sync for KhrGetDisplayProperties2Fn
impl Sync for KhrGetMemoryRequirements2Fn
impl Sync for KhrGetPhysicalDeviceProperties2Fn
impl Sync for KhrGetSurfaceCapabilities2Fn
impl Sync for KhrGlobalPriorityFn
impl Sync for KhrImageFormatListFn
impl Sync for KhrImagelessFramebufferFn
impl Sync for KhrIncrementalPresentFn
impl Sync for KhrMaintenance1Fn
impl Sync for KhrMaintenance2Fn
impl Sync for KhrMaintenance3Fn
impl Sync for KhrMaintenance4Fn
impl Sync for KhrMapMemory2Fn
impl Sync for KhrMirSurfaceFn
impl Sync for KhrMultiviewFn
impl Sync for KhrPerformanceQueryFn
impl Sync for KhrPipelineExecutablePropertiesFn
impl Sync for KhrPipelineLibraryFn
impl Sync for KhrPortabilityEnumerationFn
impl Sync for KhrPortabilitySubsetFn
impl Sync for KhrPresentIdFn
impl Sync for KhrPresentWaitFn
impl Sync for KhrPushDescriptorFn
impl Sync for KhrRayQueryFn
impl Sync for KhrRayTracingMaintenance1Fn
impl Sync for KhrRayTracingPipelineFn
impl Sync for KhrRayTracingPositionFetchFn
impl Sync for KhrRelaxedBlockLayoutFn
impl Sync for KhrSamplerMirrorClampToEdgeFn
impl Sync for KhrSamplerYcbcrConversionFn
impl Sync for KhrSeparateDepthStencilLayoutsFn
impl Sync for KhrShaderAtomicInt64Fn
impl Sync for KhrShaderClockFn
impl Sync for KhrShaderDrawParametersFn
impl Sync for KhrShaderFloat16Int8Fn
impl Sync for KhrShaderFloatControlsFn
impl Sync for KhrShaderIntegerDotProductFn
impl Sync for KhrShaderNonSemanticInfoFn
impl Sync for KhrShaderSubgroupExtendedTypesFn
impl Sync for KhrShaderSubgroupUniformControlFlowFn
impl Sync for KhrShaderTerminateInvocationFn
impl Sync for KhrSpirv14Fn
impl Sync for KhrStorageBufferStorageClassFn
impl Sync for KhrSurfaceFn
impl Sync for KhrSurfaceProtectedCapabilitiesFn
impl Sync for KhrSwapchainFn
impl Sync for KhrSwapchainMutableFormatFn
impl Sync for KhrSynchronization2Fn
impl Sync for KhrTimelineSemaphoreFn
impl Sync for KhrUniformBufferStandardLayoutFn
impl Sync for KhrVariablePointersFn
impl Sync for KhrVideoDecodeH264Fn
impl Sync for KhrVideoDecodeH265Fn
impl Sync for KhrVideoDecodeQueueFn
impl Sync for KhrVideoEncodeQueueFn
impl Sync for KhrVideoQueueFn
impl Sync for KhrVulkanMemoryModelFn
impl Sync for KhrWaylandSurfaceFn
impl Sync for KhrWin32KeyedMutexFn
impl Sync for KhrWin32SurfaceFn
impl Sync for KhrWorkgroupMemoryExplicitLayoutFn
impl Sync for KhrXcbSurfaceFn
impl Sync for KhrXlibSurfaceFn
impl Sync for KhrZeroInitializeWorkgroupMemoryFn
impl Sync for LunargDirectDriverLoadingFn
impl Sync for MesaExtension244Fn
impl Sync for MesaExtension385Fn
impl Sync for MesaExtension510Fn
impl Sync for MesaExtension518Fn
impl Sync for MsftExtension531Fn
impl Sync for MvkIosSurfaceFn
impl Sync for MvkMacosSurfaceFn
impl Sync for MvkMoltenvkFn
impl Sync for NnViSurfaceFn
impl Sync for NvAcquireWinrtDisplayFn
impl Sync for NvClipSpaceWScalingFn
impl Sync for NvComputeShaderDerivativesFn
impl Sync for NvCooperativeMatrixFn
impl Sync for NvCopyMemoryIndirectFn
impl Sync for NvCornerSampledImageFn
impl Sync for NvCoverageReductionModeFn
impl Sync for NvDedicatedAllocationFn
impl Sync for NvDedicatedAllocationImageAliasingFn
impl Sync for NvDeviceDiagnosticCheckpointsFn
impl Sync for NvDeviceDiagnosticsConfigFn
impl Sync for NvDeviceGeneratedCommandsFn
impl Sync for NvDisplacementMicromapFn
impl Sync for NvExtension53Fn
impl Sync for NvExtension101Fn
impl Sync for NvExtension104Fn
impl Sync for NvExtension152Fn
impl Sync for NvExtension168Fn
impl Sync for NvExtension292Fn
impl Sync for NvExtension308Fn
impl Sync for NvExtension330Fn
impl Sync for NvExtension332Fn
impl Sync for NvExtension351Fn
impl Sync for NvExtension429Fn
impl Sync for NvExtension430Fn
impl Sync for NvExtension432Fn
impl Sync for NvExtension433Fn
impl Sync for NvExtension452Fn
impl Sync for NvExtension492Fn
impl Sync for NvExtension493Fn
impl Sync for NvExtension494Fn
impl Sync for NvExtension504Fn
impl Sync for NvExtension506Fn
impl Sync for NvExternalMemoryCapabilitiesFn
impl Sync for NvExternalMemoryFn
impl Sync for NvExternalMemoryRdmaFn
impl Sync for NvExternalMemoryWin32Fn
impl Sync for NvFillRectangleFn
impl Sync for NvFragmentCoverageToColorFn
impl Sync for NvFragmentShaderBarycentricFn
impl Sync for NvFragmentShadingRateEnumsFn
impl Sync for NvFramebufferMixedSamplesFn
impl Sync for NvGeometryShaderPassthroughFn
impl Sync for NvGlslShaderFn
impl Sync for NvInheritedViewportScissorFn
impl Sync for NvLinearColorAttachmentFn
impl Sync for NvLowLatencyFn
impl Sync for NvMemoryDecompressionFn
impl Sync for NvMeshShaderFn
impl Sync for NvOpticalFlowFn
impl Sync for NvPresentBarrierFn
impl Sync for NvRayTracingFn
impl Sync for NvRayTracingInvocationReorderFn
impl Sync for NvRayTracingMotionBlurFn
impl Sync for NvRepresentativeFragmentTestFn
impl Sync for NvSampleMaskOverrideCoverageFn
impl Sync for NvScissorExclusiveFn
impl Sync for NvShaderImageFootprintFn
impl Sync for NvShaderSmBuiltinsFn
impl Sync for NvShaderSubgroupPartitionedFn
impl Sync for NvShadingRateImageFn
impl Sync for NvViewportArray2Fn
impl Sync for NvViewportSwizzleFn
impl Sync for NvWin32KeyedMutexFn
impl Sync for NvxBinaryImportFn
impl Sync for NvxDeviceGeneratedCommandsFn
impl Sync for NvxExtension48Fn
impl Sync for NvxImageViewHandleFn
impl Sync for NvxMultiviewPerViewAttributesFn
impl Sync for QcomExtension173Fn
impl Sync for QcomExtension174Fn
impl Sync for QcomExtension303Fn
impl Sync for QcomExtension304Fn
impl Sync for QcomExtension305Fn
impl Sync for QcomExtension306Fn
impl Sync for QcomExtension307Fn
impl Sync for QcomExtension310Fn
impl Sync for QcomExtension369Fn
impl Sync for QcomExtension440Fn
impl Sync for QcomExtension519Fn
impl Sync for QcomExtension520Fn
impl Sync for QcomExtension521Fn
impl Sync for QcomExtension522Fn
impl Sync for QcomFragmentDensityMapOffsetFn
impl Sync for QcomImageProcessingFn
impl Sync for QcomMultiviewPerViewRenderAreasFn
impl Sync for QcomMultiviewPerViewViewportsFn
impl Sync for QcomRenderPassShaderResolveFn
impl Sync for QcomRenderPassStoreOpsFn
impl Sync for QcomRenderPassTransformFn
impl Sync for QcomRotatedCopyCommandsFn
impl Sync for QcomTilePropertiesFn
impl Sync for QnxExtension530Fn
impl Sync for QnxScreenSurfaceFn
impl Sync for ReservedDoNotUse94Fn
impl Sync for ReservedDoNotUse146Fn
impl Sync for SecAmigoProfilingFn
impl Sync for SecExtension439Fn
impl Sync for SecExtension448Fn
impl Sync for SecExtension449Fn
impl Sync for SecExtension450Fn
impl Sync for SecExtension451Fn
impl Sync for ValveDescriptorSetHostMappingFn
impl Sync for ValveMutableDescriptorTypeFn
impl Sync for DeviceFnV1_0
impl Sync for DeviceFnV1_1
impl Sync for DeviceFnV1_2
impl Sync for DeviceFnV1_3
impl Sync for EntryFnV1_0
impl Sync for EntryFnV1_1
impl Sync for EntryFnV1_2
impl Sync for EntryFnV1_3
impl Sync for InstanceFnV1_0
impl Sync for InstanceFnV1_1
impl Sync for InstanceFnV1_2
impl Sync for InstanceFnV1_3
impl Sync for StaticFn
impl Sync for atomic_waker::AtomicWaker
impl Sync for Bytes
impl Sync for BytesMut
impl Sync for crossbeam_channel::select::Select<'_>
impl Sync for Collector
impl Sync for Unparker
impl Sync for Scope<'_>
impl Sync for dlopen2::raw::common::Library
impl Sync for dlopen2::symbor::library::Library
impl Sync for Atom
Immutable, so it’s safe to be shared between threads
impl Sync for libloading::os::unix::Library
impl Sync for libloading::os::unix::Library
impl Sync for libloading::safe::Library
impl Sync for libloading::safe::Library
impl Sync for tokio::runtime::task::abort::AbortHandle
impl Sync for AdapterContext
impl Sync for Fence
impl<'a> Sync for IoSlice<'a>
impl<'a> Sync for IoSliceMut<'a>
impl<'a> Sync for Notified<'a>
impl<'a, 'b, K, Q, V, S, A> Sync for OccupiedEntryRef<'a, 'b, K, Q, V, S, A>
impl<'a, 'i, K, S, M> Sync for dashmap::iter_set::Iter<'i, K, S, M>
impl<'a, 'i, K, V, S, M> Sync for dashmap::iter::Iter<'i, K, V, S, M>
impl<'a, 'i, K, V, S, M> Sync for dashmap::iter::IterMut<'i, K, V, S, M>
impl<'a, K, V> Sync for hashlink::linked_hash_map::Drain<'a, K, V>
impl<'a, K, V> Sync for hashlink::linked_hash_map::Iter<'a, K, V>
impl<'a, K, V> Sync for hashlink::linked_hash_map::IterMut<'a, K, V>
impl<'a, K, V> Sync for hashlink::linked_hash_map::RawOccupiedEntryMut<'a, K, V>
impl<'a, K, V> Sync for linked_hash_map::Drain<'a, K, V>
impl<'a, K, V> Sync for linked_hash_map::Iter<'a, K, V>
impl<'a, K, V> Sync for linked_hash_map::IterMut<'a, K, V>
impl<'a, K, V, S> Sync for dashmap::mapref::entry::OccupiedEntry<'a, K, V, S>
impl<'a, K, V, S> Sync for dashmap::mapref::entry::VacantEntry<'a, K, V, S>
impl<'a, K, V, S> Sync for RefMulti<'a, K, V, S>
impl<'a, K, V, S> Sync for RefMutMulti<'a, K, V, S>
impl<'a, K, V, S> Sync for dashmap::mapref::one::Ref<'a, K, V, S>
impl<'a, K, V, S> Sync for dashmap::mapref::one::RefMut<'a, K, V, S>
impl<'a, K, V, S> Sync for RawEntryBuilder<'a, K, V, S>
impl<'a, K, V, S> Sync for RawEntryBuilderMut<'a, K, V, S>
impl<'a, K, V, S> Sync for RawVacantEntryMut<'a, K, V, S>
impl<'a, K, V, S> Sync for Entries<'a, K, V, S>
impl<'a, R, G, T> Sync for MappedReentrantMutexGuard<'a, R, G, T>
impl<'a, R, G, T> Sync for ReentrantMutexGuard<'a, R, G, T>
impl<'a, R, T> Sync for rustjs::deno_core::parking_lot::lock_api::MappedMutexGuard<'a, R, T>
impl<'a, R, T> Sync for rustjs::deno_core::parking_lot::lock_api::MappedRwLockReadGuard<'a, R, T>
impl<'a, R, T> Sync for rustjs::deno_core::parking_lot::lock_api::MappedRwLockWriteGuard<'a, R, T>
impl<'a, R, T> Sync for rustjs::deno_core::parking_lot::lock_api::MutexGuard<'a, R, T>
impl<'a, R, T> Sync for RwLockUpgradableReadGuard<'a, R, T>
impl<'a, T> Sync for CharacterArray<'a, T>where
T: Sync,
impl<'a, T> Sync for rustjs::deno_fetch::reqwest::header::Drain<'a, T>where
T: Sync,
impl<'a, T> Sync for rustjs::deno_fetch::reqwest::header::Iter<'a, T>where
T: Sync,
impl<'a, T> Sync for rustjs::deno_fetch::reqwest::header::IterMut<'a, T>where
T: Sync,
impl<'a, T> Sync for rustjs::deno_fetch::reqwest::header::ValueDrain<'a, T>where
T: Sync,
impl<'a, T> Sync for rustjs::deno_fetch::reqwest::header::ValueIterMut<'a, T>where
T: Sync,
impl<'a, T> Sync for http::header::map::Drain<'a, T>where
T: Sync,
impl<'a, T> Sync for http::header::map::Iter<'a, T>where
T: Sync,
impl<'a, T> Sync for http::header::map::IterMut<'a, T>where
T: Sync,
impl<'a, T> Sync for http::header::map::ValueDrain<'a, T>where
T: Sync,
impl<'a, T> Sync for http::header::map::ValueIterMut<'a, T>where
T: Sync,
impl<'a, T> Sync for OnceRef<'a, T>where
T: Sync,
impl<'a, T> Sync for smallvec::Drain<'a, T>
impl<'a, T> Sync for tokio::sync::mutex::MappedMutexGuard<'a, T>
impl<'a, T> Sync for ArcBorrow<'a, T>
impl<'a, T, const CAP: usize> Sync for arrayvec::arrayvec::Drain<'a, T, CAP>where
T: Sync,
impl<'lib, T> Sync for PtrOrNull<'lib, T>where
T: Sync,
impl<'lib, T> Sync for PtrOrNullMut<'lib, T>where
T: Sync,
impl<'lib, T> Sync for dlopen2::symbor::reference::Ref<'lib, T>where
T: Sync,
impl<'lib, T> Sync for dlopen2::symbor::reference_mut::RefMut<'lib, T>where
T: Sync,
impl<'lib, T> Sync for dlopen2::symbor::symbol::Symbol<'lib, T>where
T: Sync,
impl<'lib, T> Sync for libloading::safe::Symbol<'lib, T>where
T: Sync,
impl<'lib, T> Sync for libloading::safe::Symbol<'lib, T>where
T: Sync,
impl<A> Sync for RenderBundle<A>where
A: HalApi,
impl<A, B> Sync for ArcUnion<A, B>
impl<Dyn> Sync for DynMetadata<Dyn>where
Dyn: ?Sized,
impl<Fut> Sync for rustjs::deno_core::futures::prelude::stream::futures_unordered::IntoIter<Fut>
impl<Fut> Sync for IterPinMut<'_, Fut>where
Fut: Sync,
impl<Fut> Sync for IterPinRef<'_, Fut>where
Fut: Sync,
impl<Fut> Sync for FuturesUnordered<Fut>
impl<H, T> Sync for ThinArc<H, T>
impl<K, S> Sync for dashmap::iter_set::OwningIter<K, S>
impl<K, V> Sync for hashlink::linked_hash_map::IntoIter<K, V>
impl<K, V> Sync for linked_hash_map::IntoIter<K, V>
impl<K, V, S> Sync for dashmap::iter::OwningIter<K, V, S>
impl<K, V, S> Sync for hashlink::linked_hash_map::LinkedHashMap<K, V, S>
impl<K, V, S> Sync for linked_hash_map::LinkedHashMap<K, V, S>
impl<K, V, S, A> Sync for hashbrown::map::OccupiedEntry<'_, K, V, S, A>
impl<K, V, S, A> Sync for hashbrown::map::RawOccupiedEntryMut<'_, K, V, S, A>
impl<K, V, const N: usize, S> Sync for halfbrown::entry::OccupiedEntry<'_, K, V, N, S>
impl<K, V, const N: usize, S> Sync for halfbrown::raw_entry::RawOccupiedEntryMut<'_, K, V, N, S>
impl<L, A> Sync for Dynamic<L, A>
impl<M> Sync for MemoryBlock<M>where
M: Sync,
impl<M, T, O> Sync for BitRef<'_, M, T, O>
impl<R, G> Sync for RawReentrantMutex<R, G>
impl<R, G, T> Sync for ReentrantMutex<R, G, T>
impl<R, T> Sync for rustjs::deno_core::parking_lot::lock_api::Mutex<R, T>
impl<R, T> Sync for rustjs::deno_core::parking_lot::lock_api::RwLock<R, T>
impl<R, T> Sync for rustjs::deno_core::parking_lot::lock_api::RwLockReadGuard<'_, R, T>
impl<R, T> Sync for rustjs::deno_core::parking_lot::lock_api::RwLockWriteGuard<'_, R, T>
impl<T> !Sync for *const Twhere
T: ?Sized,
impl<T> !Sync for *mut Twhere
T: ?Sized,
impl<T> !Sync for core::cell::once::OnceCell<T>
impl<T> !Sync for Cell<T>where
T: ?Sized,
impl<T> !Sync for RefCell<T>where
T: ?Sized,
impl<T> !Sync for UnsafeCell<T>where
T: ?Sized,
impl<T> !Sync for NonNull<T>where
T: ?Sized,
NonNull
pointers are not Sync
because the data they reference may be aliased.
impl<T> !Sync for std::sync::mpsc::Receiver<T>
impl<T> Sync for BitSpanError<T>where
T: BitStore,
impl<T> Sync for ArenaArc<T>
impl<T> Sync for rustjs::deno_core::futures::lock::Mutex<T>
impl<T> Sync for rustjs::deno_core::futures::lock::MutexGuard<'_, T>
impl<T> Sync for MutexLockFuture<'_, T>where
T: ?Sized,
impl<T> Sync for rustjs::deno_core::futures::lock::OwnedMutexGuard<T>
impl<T> Sync for OwnedMutexLockFuture<T>where
T: ?Sized,
impl<T> Sync for ThinBox<T>
ThinBox<T>
is Sync
if T
is Sync
because the data is owned.
impl<T> Sync for alloc::collections::linked_list::Iter<'_, T>where
T: Sync,
impl<T> Sync for alloc::collections::linked_list::IterMut<'_, T>where
T: Sync,
impl<T> Sync for SyncUnsafeCell<T>
impl<T> Sync for NonZero<T>where
T: ZeroablePrimitive + Sync,
impl<T> Sync for ChunksExactMut<'_, T>where
T: Sync,
impl<T> Sync for ChunksMut<'_, T>where
T: Sync,
impl<T> Sync for core::slice::iter::Iter<'_, T>where
T: Sync,
impl<T> Sync for core::slice::iter::IterMut<'_, T>where
T: Sync,
impl<T> Sync for RChunksExactMut<'_, T>where
T: Sync,
impl<T> Sync for RChunksMut<'_, T>where
T: Sync,
impl<T> Sync for AtomicPtr<T>
impl<T> Sync for Exclusive<T>where
T: ?Sized,
impl<T> Sync for std::sync::mpsc::Sender<T>where
T: Send,
impl<T> Sync for std::sync::mutex::MappedMutexGuard<'_, T>
impl<T> Sync for std::sync::mutex::Mutex<T>
impl<T> Sync for std::sync::mutex::MutexGuard<'_, T>
impl<T> Sync for OnceLock<T>
impl<T> Sync for ReentrantLock<T>
impl<T> Sync for ReentrantLockGuard<'_, T>
impl<T> Sync for std::sync::rwlock::MappedRwLockReadGuard<'_, T>
impl<T> Sync for std::sync::rwlock::MappedRwLockWriteGuard<'_, T>
impl<T> Sync for std::sync::rwlock::RwLock<T>
impl<T> Sync for std::sync::rwlock::RwLockReadGuard<'_, T>
impl<T> Sync for std::sync::rwlock::RwLockWriteGuard<'_, T>
impl<T> Sync for std::thread::JoinHandle<T>
impl<T> Sync for MisalignError<T>
impl<T> Sync for crossbeam_channel::channel::Receiver<T>where
T: Send,
impl<T> Sync for crossbeam_channel::channel::Sender<T>where
T: Send,
impl<T> Sync for Injector<T>where
T: Send,
impl<T> Sync for Stealer<T>where
T: Send,
impl<T> Sync for Atomic<T>
impl<T> Sync for AtomicCell<T>where
T: Send,
impl<T> Sync for CachePadded<T>where
T: Sync,
impl<T> Sync for ShardedLock<T>
impl<T> Sync for ShardedLockReadGuard<'_, T>
impl<T> Sync for ShardedLockWriteGuard<'_, T>
impl<T> Sync for ScopedJoinHandle<'_, T>
impl<T> Sync for libloading::os::unix::Symbol<T>where
T: Sync,
impl<T> Sync for libloading::os::unix::Symbol<T>where
T: Sync,
impl<T> Sync for IoVec<T>where
T: Sync,
impl<T> Sync for OnceBox<T>
impl<T> Sync for Out<'_, T>where
T: Sync,
impl<T> Sync for OutBuf<'_, T>where
T: Sync,
impl<T> Sync for OutRef<'_, T>where
T: Sync,
impl<T> Sync for ScopedKey<T>
impl<T> Sync for signal_hook::low_level::channel::Channel<T>where
T: Send,
impl<T> Sync for ReusableBoxFuture<'_, T>
impl<T> Sync for tokio::io::split::ReadHalf<T>where
T: Sync,
impl<T> Sync for tokio::io::split::WriteHalf<T>where
T: Sync,
impl<T> Sync for tokio::runtime::task::join::JoinHandle<T>where
T: Send,
impl<T> Sync for tokio::sync::broadcast::Receiver<T>where
T: Send,
impl<T> Sync for tokio::sync::broadcast::Sender<T>where
T: Send,
impl<T> Sync for tokio::sync::mutex::Mutex<T>
impl<T> Sync for tokio::sync::mutex::MutexGuard<'_, T>
impl<T> Sync for tokio::sync::mutex::OwnedMutexGuard<T>
impl<T> Sync for tokio::sync::once_cell::OnceCell<T>
impl<T> Sync for OwnedRwLockWriteGuard<T>
impl<T> Sync for tokio::sync::rwlock::read_guard::RwLockReadGuard<'_, T>
impl<T> Sync for tokio::sync::rwlock::RwLock<T>
impl<T> Sync for tokio::sync::rwlock::write_guard::RwLockWriteGuard<'_, T>
impl<T> Sync for RwLockMappedWriteGuard<'_, T>
impl<T> Sync for triomphe::arc::Arc<T>
impl<T> Sync for OffsetArc<T>
impl<T> Sync for UniqueArc<T>
impl<T> Sync for TryLock<T>where
T: Send,
impl<T, A> !Sync for Rc<T, A>
impl<T, A> !Sync for alloc::rc::Weak<T, A>
impl<T, A> Sync for alloc::collections::linked_list::Cursor<'_, T, A>
impl<T, A> Sync for CursorMut<'_, T, A>
impl<T, A> Sync for LinkedList<T, A>
impl<T, A> Sync for alloc::collections::vec_deque::drain::Drain<'_, T, A>
impl<T, A> Sync for alloc::sync::Weak<T, A>
impl<T, A> Sync for alloc::vec::drain::Drain<'_, T, A>
impl<T, A> Sync for alloc::vec::into_iter::IntoIter<T, A>
impl<T, A> Sync for Box<T, A>
impl<T, A> Sync for allocator_api2::stable::vec::drain::Drain<'_, T, A>
impl<T, A> Sync for allocator_api2::stable::vec::into_iter::IntoIter<T, A>
impl<T, A> Sync for RawDrain<'_, T, A>
impl<T, A> Sync for RawIntoIter<T, A>
impl<T, A> Sync for RawTable<T, A>
impl<T, A> Sync for hashbrown::table::OccupiedEntry<'_, T, A>
impl<T, A> Sync for rustjs::deno_fs::sync::MaybeArc<T, A>
impl<T, F> Sync for LazyLock<T, F>
impl<T, F> Sync for once_cell::sync::Lazy<T, F>
impl<T, F, S> Sync for ScopeGuard<T, F, S>
impl<T, N> Sync for GenericArray<T, N>where
T: Sync,
N: ArrayLength<T>,
impl<T, O> Sync for bitvec::boxed::iter::IntoIter<T, O>
impl<T, O> Sync for BitBox<T, O>
impl<T, O> Sync for bitvec::slice::iter::Iter<'_, T, O>
impl<T, O> Sync for bitvec::slice::iter::IterMut<'_, T, O>
impl<T, O> Sync for BitSlice<T, O>
§Bit-Slice Thread Safety
This allows bit-slice references to be moved across thread boundaries only when
the underlying T
element can tolerate concurrency.
All BitSlice
references, shared or exclusive, are only threadsafe if the T
element type is Send
, because any given bit-slice reference may only have
partial control of a memory element that is also being shared by a bit-slice
reference on another thread. As such, this is never implemented for Cell<U>
,
but always implemented for AtomicU
and U
for a given unsigned integer type
U
.
Atomic integers safely handle concurrent writes, cells do not allow concurrency
at all, so the only missing piece is &mut BitSlice<_, U: Unsigned>
. This is
handled by the aliasing system that the mutable splitters employ: a mutable
reference to an unsynchronized bit-slice can only cross threads when no other
handle is able to exist to the elements it governs. Splitting a mutable
bit-slice causes the split halves to change over to either atomics or cells, so
concurrency is either safe or impossible.