Ini adalah perintah rrdthreads yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
rrdthreads - Ketentuan untuk menghubungkan perpustakaan RRD untuk digunakan dalam program multi-utas
RINGKASAN
Menggunakan librrd dalam program multi-utas memerlukan beberapa tindakan pencegahan ekstra, karena RRD
perpustakaan dalam bentuk aslinya sama sekali tidak aman. Dokumen ini menjelaskan
persyaratan dan jebakan tentang cara menggunakan librrd versi multi-utas di
program sendiri. Ini juga memberikan petunjuk untuk pengembangan RRD di masa depan untuk menjaga thread perpustakaan tetap
aman.
Saat ini hanya beberapa operasi RRD yang diimplementasikan dengan cara yang aman. Mereka semua berakhir di
akhiran ""_r"" yang biasa.
DESKRIPSI
Untuk menggunakan librrd dalam program multi-utas, Anda harus:
· Berhubungan dengan librd_th alih-alih perpustakaan (gunakan "-lrrd_th" saat menautkan)
· Gunakan fungsi ""_r"" alih-alih fungsi API biasa
· Jangan gunakan spesifikasi waktu at-style. Parsing dari spesifikasi waktu tersebut adalah
sangat non-utas-aman.
· Jangan pernah menggunakan fungsi non *"_r" kecuali secara eksplisit didokumentasikan bahwa fungsi tersebut
aman untuk tapak.
· Setiap utas HARUS memanggil "rrd_get_context()" sebelum panggilan pertamanya ke "librrd_th" mana pun
berfungsi untuk mengatur data spesifik utas. Ini tidak benar-benar diperlukan, tapi
ini adalah satu-satunya cara untuk menguji apakah alokasi memori dapat dilakukan oleh fungsi ini.
Jika tidak, program dapat mati dengan SIGSEGV dalam situasi memori rendah.
· Selalu panggil "rrd_error_clear()" sebelum panggilan apa pun ke perpustakaan. Jika tidak, panggilan
mungkin gagal karena beberapa kesalahan sebelumnya.
CATATAN UNTUK RRD KONTRIBUTOR
Beberapa tindakan pencegahan harus diikuti saat mengembangkan RRD mulai sekarang:
· Hanya gunakan fungsi thread-safe dalam kode perpustakaan. Banyak fungsi libc yang sering digunakan tidak
aman untuk benang. Berhati-hatilah dalam situasi berikut atau saat menggunakan perpustakaan berikut
fungsi:
· Panggilan langsung ke "strerror()" harus dihindari: gunakan "rrd_strerror()" sebagai gantinya, itu
memberikan pesan kesalahan per-utas.
· Keluarga fungsi "getpw*", "getgr*", "gethost*" (dan beberapa lagi "get*"
function) tidak thread-safe: gunakan varian *"_r"
· Fungsi waktu: "asctime", "ctime", "gmtime", "localtime": gunakan varian *"_r"
· "strtok": gunakan "strtok_r"
· "tmpnam": gunakan "tmpnam_r"
· Banyak lainnya (dokumentasi pencarian)
· File header bernama rrd_is_thread_safe.h disediakan yang bekerja dengan GNU
C-preprocessor untuk "meracuni" beberapa fungsi non-thread-safe yang paling umum menggunakan
Arahan "#pragma GCC racun". Cukup sertakan header ini di file sumber yang Anda inginkan
menjaga benang-aman.
· Jangan perkenalkan variabel global!
Jika Anda benar-benar harus menggunakan variabel global, Anda dapat menambahkan bidang baru ke
struktur "rrd_context" dan modifikasi rrd_error.c, rrd_thread_safe.c dan
rrd_non_thread_safe.c
· Jangan gunakan "getopt" atau "getopt_long" di *"_r" (baik secara langsung maupun tidak langsung).
"getopt" menggunakan variabel global dan berperilaku buruk dalam aplikasi multi-utas ketika
disebut bersamaan. Alih-alih berikan fungsi *_r dengan mengambil semua opsi sebagai fungsi
parameter. Anda dapat memberikan argumen argc dan **argv untuk argumen panjang variabel
daftar. Lihat "rrd_update_r" sebagai contoh.
· Jangan gunakan fungsi "rrd_parsetime"!
Ini menggunakan banyak variabel global. Anda dapat menggunakannya dalam fungsi yang tidak dirancang untuk menjadi
thread-safe, seperti dalam fungsi yang membungkus versi "_r" dari beberapa operasi (mis.
"rrd_create", tetapi tidak di "rrd_create_r")
SAAT INI DITERAPKAN BENANG AMAN FUNGSI
Saat ini ada varian thread-safe dari "rrd_update", "rrd_create", "rrd_dump",
"rrd_info", "rrd_last", dan "rrd_fetch".
Gunakan rrdthreads online menggunakan layanan onworks.net