_InterlockedAnd _InterlockedAnd64
Specifické pro Microsoft
Slouží k provádění atomická operace a bitová na proměnnou sdíleny více vlákny.
long _InterlockedAnd( long volatile * value, long mask ); long _InterlockedAnd_acq( long volatile * value, long mask ); long _InterlockedAnd_HLEAcquire( long volatile * value, long mask ); long _InterlockedAnd_HLERelease( long volatile * value, long mask ); long _InterlockedAnd_nf( long volatile * value, long mask ); long _InterlockedAnd_np( long volatile * value, long mask ); long _InterlockedAnd_rel( long volatile * value, long mask ); char _InterlockedAnd8( char volatile * value, char mask ); char _InterlockedAnd8_acq( char volatile * value, char mask ); char _InterlockedAnd8_nf( char volatile * value, char mask ); char _InterlockedAnd8_np( char volatile * value, char mask ); char _InterlockedAnd8_rel( char volatile * value, char mask ); short _InterlockedAnd16( short volatile * value, short mask ); short _InterlockedAnd16_acq( short volatile * value, short mask ); short _InterlockedAnd16_nf( short volatile * value, short mask ); short _InterlockedAnd16_np( short volatile * value, short mask ); short _InterlockedAnd16_rel( short volatile * value, short mask ); __int64 _InterlockedAnd64( __int64 volatile* value, __int64 mask ); __int64 _InterlockedAnd64_acq( __int64 volatile* value, __int64 mask ); __int64 _InterlockedAnd64_HLEAcquire( __int64 volatile* value, __int64 mask ); __int64 _InterlockedAnd64_HLERelease( __int64 volatile* value, __int64 mask ); __int64 _InterlockedAnd64_nf( __int64 volatile* value, __int64 mask ); __int64 _InterlockedAnd64_np( __int64 volatile* value, __int64 mask ); __int64 _InterlockedAnd64_rel( __int64 volatile* value, __int64 mask );
Parametry
[in, out] value
Ukazatel na první operand, budou nahrazeny výsledek.[v]mask
Druhý operand.
Vrácená hodnota
Původní hodnota První operand.
Požadavky
Vnitřní |
Architektura |
Záhlaví |
---|---|---|
_InterlockedAnd, _InterlockedAnd8, _InterlockedAnd16, _InterlockedAnd64 |
x 86, ARM,x64 |
< intrin.h > |
_InterlockedAnd_acq, _InterlockedAnd_nf, _InterlockedAnd_rel, _InterlockedAnd8_acq, _InterlockedAnd8_nf, _InterlockedAnd8_rel, _InterlockedAnd16_acq, _InterlockedAnd16_nf, _InterlockedAnd16_rel, _InterlockedAnd64_acq, _InterlockedAnd64_nf, _InterlockedAnd64_rel |
ARM |
< intrin.h > |
_InterlockedAnd_np, _InterlockedAnd8_np, _InterlockedAnd16_np, _InterlockedAnd64_np |
x64 |
< intrin.h > |
_InterlockedAnd_HLEAcquire, _InterlockedAnd_HLERelease, _InterlockedAnd64_HLEAcquire, _InterlockedAnd64_HLERelease |
x 86x64 |
< immintrin.h > |
Poznámky
Počet název každé funkce určuje velikost bit argumentů.
Na platformách ARM, použijte vnitřní objekty s _acq a _rel přípony pro získání a verze sémantiku, například na začátku a na konci kritické sekce.Vnitřní objekty s _nf příponu ("žádné ohraničení") není fungovat jako překážku paměti.
Vnitřní objekty s _np příponu ("žádné předběžné") zabraňují možný předběžné operace bude vložen překladačem.
Na platformách Intel, které podporují hardwaru uzamčení Elision (HLE) pokyny, vnitřní objekty s _HLEAcquire a _HLERelease přípony zahrnout nápovědu pro procesor, který mohou urychlit výkonu tím, že eliminuje krok zápisu uzamčení hardwaru.Pokud tyto vnitřní objekty se nazývají na platformách, které nepodporují HLE, je pokyn ignorován.
Příklad
// InterlockedAnd.cpp
// Compile with: /Oi
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(_InterlockedAnd)
int main()
{
long data1 = 0xFF00FF00;
long data2 = 0x00FFFF00;
long retval;
retval = _InterlockedAnd(&data1, data2);
printf_s("0x%x 0x%x 0x%x", data1, data2, retval);
}