Interlocked.MemoryBarrierProcessWide Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller en processomfattande minnesbarriär som säkerställer att läsningar och skrivningar från processorer inte kan flyttas över barriären.
public:
static void MemoryBarrierProcessWide();
public static void MemoryBarrierProcessWide();
static member MemoryBarrierProcessWide : unit -> unit
Public Shared Sub MemoryBarrierProcessWide ()
Kommentarer
Metoden MemoryBarrierProcessWide skiljer sig från metoden "normal" MemoryBarrier enligt följande:
Den normala minnesbarriären säkerställer att läsningar och skrivningar från den aktuella processorn inte kan flyttas över barriären. Den processomfattande minnesbarriären säkerställer att alla läsningar eller skrivningar från processorer som används i processen inte kan flyttas över barriären.
Den normala minnesbarriären tillåter rimlig delad åtkomst om varje tråd som kommer åt data använder hinder. Den processomfattande minnesbarriären tvingar andra processorer att synkronisera med processminnet (till exempel för att rensa skrivbuffertar och synkronisera läsbuffertar). Detta möjliggör icke-sammankopplade åtgärder i vissa trådar och har fortfarande rimlig delad åtkomst.
Den normala minnesbarriären medför mycket lite omkostnader; normala sammankopplade åtgärder kostar förmodligen färre än hundra cykler. Den processomfattande minnesbarriären är mycket dyr. Det måste tvinga varje processor i processen att göra något, till en sannolik kostnad av tusentals cykler.
Metoden MemoryBarrierProcessWide lider också av alla subtiliteter i låsfri programmering. Ändå kan den här metoden vara mycket användbar när du faktiskt behöver kalla den, vilket bör vara sällsynt.
Den här metoden omsluter ett anrop till FlushProcessWriteBuffers på Windows och sys_membarrier i Linux.