atomic
Struktur
Menjelaskan objek yang melakukan atomic
operasi pada nilai jenis Ty
tersimpan .
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 this bebas 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 atomic
memcpy
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_cst
memory_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_cst
memory_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_cst
memory_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_cst
memory_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_cst
memory_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 *this
batasan memory_order_seq_cst
memory_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 *this
batasan batasan memory_order_seq_cst
memory_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 *this
batasan batasan memory_order_seq_cst
memory_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 *this
Exp
. 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 *this
Exp
. 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 *this
batasan 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 *this
batasan 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 *this
batasan 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 *this
batasan 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 *this
batasan 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 *this
batasan memori yang ditentukan oleh Order
.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk