GNU/Linux >> Belajar Linux >  >> Linux

Apakah akses ke tumpukan serial?

new dan delete aman untuk thread

Fungsi-fungsi berikut diperlukan agar thread-safe:

  • Versi pustaka operator new dan operator delete
  • Versi penggantian pengguna untuk operator new global dan operator delete
  • std::calloc , std::malloc , std::realloc , std::aligned_alloc , std::free

Pemanggilan ke fungsi ini yang mengalokasikan atau membatalkan alokasi unit penyimpanan tertentu terjadi dalam urutan total tunggal, dan setiap panggilan pembatalan alokasi tersebut terjadi-sebelum alokasi berikutnya (jika ada) dalam urutan ini.

Dengan gcc, new diimplementasikan dengan mendelegasikan ke malloc , dan kita melihat bahwa malloc mereka memang menggunakan kunci. Jika Anda khawatir alokasi Anda menyebabkan kemacetan, tulis alokasi Anda sendiri.


Jawabannya ya, tapi dalam praktiknya biasanya bukan masalah. Jika ini masalah bagi Anda, Anda dapat mencoba mengganti implementasi malloc Anda dengan tcmalloc yang mengurangi, tetapi tidak menghilangkan kemungkinan pertikaian (karena hanya ada 1 heap yang perlu dibagi di antara utas dan proses).

TCMalloc menetapkan setiap utas sebuah cache lokal-utas. Alokasi kecil dipenuhi dari cache thread-local. Objek dipindahkan dari struktur data pusat ke cache thread-local sesuai kebutuhan, dan pengumpulan sampah berkala digunakan untuk memigrasikan kembali memori dari cache thread-local ke struktur data pusat.

Ada juga opsi lain seperti menggunakan pengalokasi khusus dan/atau wadah khusus dan/atau mendesain ulang aplikasi Anda.


Linux
  1. Mengapa Menghapus Iptables "mematahkan" Akses Jaringan?

  2. Bagaimana Cara Mengakses Argumen Terakhir Dari Perintah yang Dikomentari?

  3. Cara mengakses antarmuka Webmail di cPanel

  1. Bagaimana cara mengakses Panel Kontrol?

  2. Perbedaan antara tumpukan Java dan tumpukan C asli

  3. Bagaimana menerapkan readlink untuk menemukan jalan

  1. Bagaimana cara mengakses Soket Domain Unix dari baris perintah?

  2. Lihat titik akses nirkabel yang tersedia di terminal?

  3. Jika tumpukan diinisialisasi nol untuk keamanan, lalu mengapa tumpukan hanya diinisialisasi?