Share via


atomic Struktur

Menjelaskan objek yang melakukan atomic operasi pada nilai jenis Tytersimpan .

Sintaks

template <class Ty>
struct atomic;

Anggota

Anggota Deskripsi
Constructor
atomic Membuat objek atom.
Operator
atomic::operator Ty Membaca dan mengembalikan nilai tersimpan. (atomic::load)
atomic::operator= Menggunakan nilai yang ditentukan untuk menggantikan nilai yang disimpan. (atomic::store)
atomic::operator++ Menaikkan nilai yang disimpan. Hanya digunakan oleh spesialisasi integral dan pointer.
atomic::operator+= Menambahkan nilai yang ditentukan ke nilai tersimpan. Hanya digunakan oleh spesialisasi integral dan pointer.
atomic::operator-- Mengurangi nilai tersimpan. Hanya digunakan oleh spesialisasi integral dan pointer.
atomic::operator-= Mengurangi nilai yang ditentukan dari nilai yang disimpan. Hanya digunakan oleh spesialisasi integral dan pointer.
atomic::operator&= Melakukan bitwise "dan" (&) pada nilai tertentu dan nilai tersimpan. Hanya digunakan oleh spesialisasi integral.
atomic::operator|= Melakukan bitwise "atau" (|) pada nilai tertentu dan nilai tersimpan. Hanya digunakan oleh spesialisasi integral.
atomic::operator^= Melakukan bitwise "eksklusif atau" (^) pada nilai tertentu dan nilai tersimpan. Hanya digunakan oleh spesialisasi integral.
Fungsi
compare_exchange_strong atomic_compare_and_exchange Melakukan operasi pada this dan mengembalikan hasilnya.
compare_exchange_weak weak_atomic_compare_and_exchange Melakukan operasi pada this dan mengembalikan hasilnya.
fetch_add Menambahkan nilai yang ditentukan ke nilai tersimpan.
fetch_and Melakukan bitwise "dan" (&) pada nilai tertentu dan nilai tersimpan.
fetch_or Melakukan bitwise "atau" (|) pada nilai tertentu dan nilai tersimpan.
fetch_sub Mengurangi nilai yang ditentukan dari nilai yang disimpan.
fetch_xor Melakukan bitwise "eksklusif atau" (^) pada nilai tertentu dan nilai tersimpan.
is_lock_free Menentukan apakah atomic operasi aktif thisbebas kunci. Jenis atomic dikunci bebas jika tidak ada atomic operasi pada jenis tersebut yang menggunakan kunci.
load Membaca dan mengembalikan nilai tersimpan.
store Menggunakan nilai yang ditentukan untuk menggantikan nilai yang disimpan.

Keterangan

Jenis Ty harus dapat disalin secara sepele. Artinya, menggunakan memcpy untuk menyalin byte-nya harus menghasilkan objek yang valid Ty yang dibandingkan dengan objek asli. Fungsi compare_exchange_weak anggota dan compare_exchange_strong digunakan memcmp untuk menentukan apakah dua Ty nilai sama. Fungsi-fungsi ini tidak akan menggunakan Ty.operator== Fungsi anggota penggunaan atomicmemcpy untuk menyalin nilai jenis Ty.

Spesialisasi parsial, atomic<Ty*>, ada untuk semua jenis penunjuk. Spesialisasi memungkinkan penambahan offset ke nilai pointer terkelola atau pengurangan offset darinya. Operasi aritmatika mengambil argumen jenis ptrdiff_t dan menyesuaikan argumen tersebut sesuai dengan ukuran Ty agar konsisten dengan aritmatika alamat biasa.

Spesialisasi ada untuk setiap jenis integral kecuali bool. Setiap spesialisasi menyediakan serangkaian metode yang kaya untuk operasi aritmatika dan logis atom.

atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>

atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>

Spesialisasi integral berasal dari jenis yang atomic_integral sesuai. Misalnya, atomic<unsigned int> berasal dari atomic_uint.

Persyaratan

Header:<atomic>

Ruang nama:std

atomic::atomic

Membuat objek atom.

atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;

Parameter

Value
Nilai inisialisasi.

Keterangan

Objek atom tidak dapat disalin atau dipindahkan.

Objek yang merupakan instansiasi hanya dapat diinisialisasi oleh konstruktor yang mengambil argumen jenis Ty dan bukan dengan menggunakan inisialisasi atomic<Ty> agregat. Namun, atomic_integral objek hanya dapat diinisialisasi dengan menggunakan inisialisasi agregat.

atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);

atomic::operator Ty

Operator untuk jenis yang ditentukan ke templat, atomic<Ty>. Mengambil nilai tersimpan di *this.

atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;

Keterangan

Operator ini menerapkan memory_order_seq_cstmemory_order.

atomic::operator=

Menyimpan nilai tertentu.

Ty operator=(
   Ty Value
) volatile noexcept;
Ty operator=(
   Ty Value
) noexcept;

Parameter

Value
Objek Ty.

Tampilkan Nilai

Menampilkan Value.

atomic::operator++

Menaikkan nilai yang disimpan. Hanya digunakan oleh spesialisasi integral dan pointer.

Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;

Tampilkan Nilai

Dua operator pertama mengembalikan nilai yang dinaikkan; dua operator terakhir mengembalikan nilai sebelum kenaikan. Operator menggunakan memory_order_seq_cstmemory_order.

atomic::operator+=

Menambahkan nilai yang ditentukan ke nilai tersimpan. Hanya digunakan oleh spesialisasi integral dan pointer.

Ty atomic<Ty>::operator+=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
   Ty Value
) noexcept;

Parameter

Value
Nilai integral atau pointer.

Tampilkan Nilai

Objek Ty yang berisi hasil penambahan.

Keterangan

Operator ini menggunakan memory_order_seq_cstmemory_order.

atomic::operator--

Mengurangi nilai tersimpan. Hanya digunakan oleh spesialisasi integral dan pointer.

Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;

Tampilkan Nilai

Dua operator pertama mengembalikan nilai yang direkrementasi; dua operator terakhir mengembalikan nilai sebelum penurunan. Operator menggunakan memory_order_seq_cstmemory_order.

atomic::operator-=

Mengurangi nilai yang ditentukan dari nilai yang disimpan. Hanya digunakan oleh spesialisasi integral dan pointer.

Ty atomic<Ty>::operator-=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
   Ty Value
) noexcept;

Parameter

Value
Nilai integral atau pointer.

Tampilkan Nilai

Objek Ty yang berisi hasil pengurangan.

Keterangan

Operator ini menggunakan memory_order_seq_cstmemory_order.

atomic::operator&=

Melakukan bitwise "dan" (&) pada nilai tertentu dan nilai tersimpan dari *this. Hanya digunakan oleh spesialisasi integral.

atomic<Ty>::operator&= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
   Ty Value
) noexcept;

Parameter

Value
Nilai jenis Ty.

Tampilkan Nilai

Hasil bitwise "dan" (&).

Keterangan

Operator ini melakukan operasi baca-ubah-tulis untuk mengganti nilai tersimpan *this dengan bitwise "dan" (&) dari Value dan nilai saat ini yang disimpan di , dalam *thisbatasan memory_order_seq_cstmemory_order.

atomic::operator|=

Melakukan bitwise "atau" (|) pada nilai tertentu dan nilai tersimpan dari *this. Hanya digunakan oleh spesialisasi integral.

atomic<Ty>::operator|= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
   Ty Value
) noexcept;

Parameter

Value
Nilai jenis Ty.

Tampilkan Nilai

Hasil bitwise "atau" (|).

Keterangan

Operator ini melakukan operasi baca-ubah-tulis untuk mengganti nilai tersimpan *this dengan bitwise "atau" (|) dari Value dan nilai saat ini yang disimpan di , dalam *thisbatasan batasan memory_order_seq_cstmemory_order .

atomic::operator^=

Melakukan bitwise "eksklusif atau" (^) pada nilai tertentu dan nilai tersimpan dari *this. Hanya digunakan oleh spesialisasi integral.

atomic<Ty>::operator^= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
   Ty Value
) noexcept;

Parameter

Value
Nilai jenis Ty.

Tampilkan Nilai

Hasil bitwise "eksklusif atau" (^).

Keterangan

Operator ini melakukan operasi baca-ubah-tulis untuk mengganti nilai tersimpan *this dengan bitwise "eksklusif atau" (^) dan Value nilai saat ini yang disimpan di , dalam *thisbatasan batasan memory_order_seq_cstmemory_order .

atomic::compare_exchange_strong

Melakukan operasi perbandingan dan pertukaran atomik pada *this.

bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) noexcept;

Parameter

Exp
Nilai jenis Ty.

Value
Nilai jenis Ty.

Order1
Argumen pertama memory_order .

Order2
Argumen kedua memory_order .

Tampilkan Nilai

bool yang menunjukkan hasil perbandingan nilai.

Keterangan

Operasi perbandingan dan pertukaran atom ini membandingkan nilai yang disimpan dengan *thisExp. Jika nilainya sama, operasi menggantikan nilai yang disimpan *this dengan menggunakan Value operasi baca-ubah-tulis dan menerapkan batasan urutan memori yang ditentukan oleh Order1. Jika nilainya tidak sama, operasi menggunakan nilai yang disimpan untuk *this menggantikan Exp dan menerapkan batasan urutan memori yang ditentukan oleh Order2.

Kelebihan beban yang tidak memiliki kedua memory_order menggunakan implisit Order2 yang didasarkan pada nilai Order1. Jika Order1 adalah memory_order_acq_rel, Order2 adalah memory_order_acquire. Jika Order1 adalah memory_order_release, Order2 adalah memory_order_relaxed. Dalam semua kasus lain, Order2 sama dengan Order1.

Untuk kelebihan beban yang mengambil dua memory_order parameter, nilai Order2 tidak boleh memory_order_release atau memory_order_acq_rel, dan tidak boleh lebih kuat dari nilai Order1.

atomic::compare_exchange_weak

Melakukan operasi perbandingan dan pertukaran atom yang lemah pada *this.

bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) noexcept;

Parameter

Exp
Nilai jenis Ty.

Value
Nilai jenis Ty.

Order1
Argumen pertama memory_order .

Order2
Argumen kedua memory_order .

Tampilkan Nilai

bool yang menunjukkan hasil perbandingan nilai.

Keterangan

Operasi perbandingan dan pertukaran atom ini membandingkan nilai yang disimpan dengan *thisExp. Jika nilainya sama, operasi menggantikan nilai yang disimpan *this dengan menggunakan Value operasi baca-ubah-tulis dan menerapkan batasan urutan memori yang ditentukan oleh Order1. Jika nilainya tidak sama, operasi menggunakan nilai yang disimpan untuk *this menggantikan Exp dan menerapkan batasan urutan memori yang ditentukan oleh Order2.

Perbandingan atom lemah dan operasi pertukaran melakukan pertukaran jika nilai yang dibandingkan sama. Jika nilainya tidak sama, operasi tidak dijamin untuk melakukan pertukaran.

Kelebihan beban yang tidak memiliki kedua memory_order menggunakan implisit Order2 yang didasarkan pada nilai Order1. Jika Order1 adalah memory_order_acq_rel, Order2 adalah memory_order_acquire. Jika Order1 adalah memory_order_release, Order2 adalah memory_order_relaxed. Dalam semua kasus lain, Order2 sama dengan Order1.

Untuk kelebihan beban yang mengambil dua memory_order parameter, nilai Order2 tidak boleh memory_order_release atau memory_order_acq_rel, dan tidak boleh lebih kuat dari nilai Order1.

atomic::exchange

Menggunakan nilai yang ditentukan untuk menggantikan nilai tersimpan dari *this.

Ty atomic<Ty>::exchange(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Nilai jenis Ty.

Order
memory_order.

Tampilkan Nilai

Nilai tersimpan sebelum *this pertukaran.

Keterangan

Operasi ini melakukan operasi baca-ubah-tulis untuk digunakan Value untuk menggantikan nilai yang disimpan di , dalam *thisbatasan memori yang ditentukan oleh Order.

atomic::fetch_add

Mengambil nilai yang disimpan di *this, lalu menambahkan nilai tertentu ke nilai yang disimpan.

Ty atomic<Ty>::fetch_add (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Nilai jenis Ty.

Order
memory_order.

Tampilkan Nilai

Objek Ty yang berisi nilai yang disimpan *this sebelum penambahan.

Keterangan

Metode ini fetch_add melakukan operasi baca-ubah-tulis untuk secara atomik menambahkan Value ke nilai tersimpan di *this, dan menerapkan batasan memori yang ditentukan oleh Order.

atomic::fetch_and

Melakukan bitwise "dan" (&) pada nilai dan nilai yang ada yang disimpan di *this.

Ty atomic<Ty>::fetch_and (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Nilai jenis Ty.

Order
memory_order.

Tampilkan Nilai

Objek Ty yang berisi hasil bitwise "dan" (&).

Keterangan

Metode ini fetch_and melakukan operasi baca-ubah-tulis untuk mengganti nilai tersimpan *this dengan bitwise "dan" (&) dari Value dan nilai saat ini yang disimpan dalam , dalam *thisbatasan memori yang ditentukan oleh Order.

atomic::fetch_or

Melakukan bitwise "atau" (|) pada nilai dan nilai yang ada yang disimpan di *this.

Ty atomic<Ty>::fetch_or (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Nilai jenis Ty.

Order
memory_order.

Tampilkan Nilai

Objek Ty yang berisi hasil bitwise "atau" (|).

Keterangan

Metode ini fetch_or melakukan operasi baca-ubah-tulis untuk mengganti nilai tersimpan *this dengan bitwise "atau" (|) dari Value dan nilai saat ini yang disimpan dalam , dalam *thisbatasan memori yang ditentukan oleh Order.

atomic::fetch_sub

Mengurangi nilai yang ditentukan dari nilai yang disimpan.

Ty atomic<Ty>::fetch_sub (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Nilai jenis Ty.

Order
memory_order.

Tampilkan Nilai

Objek Ty yang berisi hasil pengurangan.

Keterangan

Metode ini fetch_sub melakukan operasi baca-ubah-tulis untuk mengurangi nilai tersimpan secara atomik Value dalam , dalam *thisbatasan memori yang ditentukan oleh Order.

atomic::fetch_xor

Melakukan bitwise "eksklusif atau" (^) pada nilai dan nilai yang ada yang disimpan di *this.

Ty atomic<Ty>::fetch_xor (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Nilai jenis Ty.

Order
memory_order.

Tampilkan Nilai

Objek Ty yang berisi hasil bitwise "eksklusif atau" (^).

Keterangan

Metode ini fetch_xor melakukan operasi baca-ubah-tulis untuk mengganti nilai tersimpan *this dengan bitwise "eksklusif atau" (^) dari Value dan nilai saat ini yang disimpan di *this, dan menerapkan batasan memori yang ditentukan oleh Order.

atomic::is_lock_free

Menentukan apakah atomic operasi aktif *this bebas kunci.

bool is_lock_free() const volatile noexcept;

Tampilkan Nilai

true jika atomic operasi pada *this adalah bebas kunci; jika tidak, false.

Keterangan

Jenis atomic dikunci bebas jika tidak ada atomic operasi pada jenis tersebut yang menggunakan kunci.

atomic::load

Mengambil nilai tersimpan dalam , dalam *thisbatasan memori yang ditentukan.

Ty atomic::load(
   memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
   memory_order Order = memory_order_seq_cst
) const noexcept;

Parameter

Order
memory_order. Order tidak boleh memory_order_release atau memory_order_acq_rel.

Tampilkan Nilai

Nilai yang diambil yang disimpan di *this.

atomic::store

Menyimpan nilai tertentu.

void atomic<Ty>::store(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parameter

Value
Objek Ty.

Order
Batasan memory_order .

Keterangan

Fungsi anggota ini secara atomik menyimpan Value dalam , dalam *thisbatasan memori yang ditentukan oleh Order.

Baca juga

<atomic>
Referensi File Header