Dari diskusi saya telah melihat bahwa operasi atom dan keselamatan ulir adalah hal yang sama, tetapi banyak orang mengatakan bahwa mereka berbeda. Adakah yang bisa memberi tahu saya perbedaannya jika ada?
c#
programming-languages
multithreading
pengguna960567
sumber
sumber
Jawaban:
Operasi atom adalah cara untuk mencapai keselamatan ulir baik dengan menggunakan beberapa jenis kunci seperti Mutex atau Semaphores yang menggunakan operasi atom secara internal atau dengan menerapkan sinkronisasi bebas kunci menggunakan atom dan pagar memori.
Jadi operasi atom pada tipe data primitif adalah alat untuk mencapai keselamatan ulir tetapi tidak memastikan keamanan ulir secara otomatis karena Anda biasanya memiliki beberapa operasi yang saling bergantung. Anda harus memastikan bahwa operasi ini dilakukan tanpa gangguan misalnya menggunakan Mutex.
Ya, menulis salah satu dari tipe data atom ini dalam c # adalah thread aman, tetapi itu tidak membuat fungsi yang Anda gunakan dalam thread aman. Ini hanya memastikan bahwa penulisan tunggal dijalankan dengan benar bahkan jika utas kedua mengaksesnya "pada saat yang sama". Namun demikian, bacaan berikutnya dari utas saat ini tidak dipastikan untuk mendapatkan nilai yang sebelumnya ditulis sebagai utas yang berbeda mungkin telah ditulis untuk itu, hanya saja nilai yang dibaca valid.
sumber
Atomicity dan keamanan benang adalah dua hal yang berbeda. Atomicity mengacu pada kualitas operasi "semua atau tidak sama sekali"; Jika suatu operasi tidak dapat dilakukan 100% dengan sukses, maka sistem harus tetap dalam keadaan keseluruhan sebelum sebelum bagian operasi dimulai. Contoh klasik adalah transaksi basis data; Saat menyimpan faktur, termasuk tajuknya dan beberapa item baris, setiap bagian dari setiap baris basis data harus ditempatkan dengan sukses; jika tidak, data hilang atau rusak. Jika item baris tidak dapat disisipkan, maka tidak hanya seharusnya tidak ada baris lain yang tersisa dimasukkan, tetapi tidak ada baris yang sudah diproses harus tetap ada.
Thread-safety mengacu pada kombinasi hal-hal, termasuk atomicity, yang memungkinkan operasi menjadi "reentrant"; banyak pekerja dapat melakukan operasi yang sama, mulai pada waktu yang sama atau berbeda, tanpa mempengaruhi yang lain. Ada banyak model untuk pengoperasian yang aman dengan benang; kebanyakan dari mereka bermuara secara konseptual baik menjalankan beberapa tugas paralel dalam isolasi lengkap (dua pekerja dapat melakukan tugas yang sama pada dua objek yang berbeda atau kumpulan objek tanpa pernah mengetahui pekerja lain bahkan ada), atau menyiapkan "pipa" di mana beberapa pekerja masing-masing melakukan satu tugas dari seluruh operasi (baik masing-masing pekerja berkembang dari tugas pertama ke yang berikutnya dan seterusnya, atau yang lain berfokus pada satu tugas dan menyerahkan "produk kerja" perantara ke pekerja berikutnya).
sumber
Operasi atom adalah operasi yang tidak dapat diinterupsi.
Thread yang aman adalah thread yang dapat dengan aman diinterupsi.
Keamanan benang diperoleh dengan operasi atom, khususnya dalam logika yang mencegah sumber daya kritis diakses berulang kali.
Operasi atom dasar adalah Uji-dan-set , yang digunakan untuk menerapkan semafor, yang pada gilirannya digunakan untuk menerapkan keselamatan ulir.
sumber
Thread-safety lebih merupakan kerangka kerja atau "konsep", operasi atom adalah subset, sarana (salah satu dari banyak) untuk mencapai status sebagai diklasifikasikan sebagai 'thread-safe'.
Keamanan thread mengacu pada proses yang dapat diakses oleh utas terpisah, di mana akses satu (dan manipulasi data), tidak akan merusak integritas operasi yang lain.
Sebagian besar keterampilan programmer mengetahui cara mencapai hal ini, tergantung pada situasi dan tujuan utama, Anda mungkin perlu menerapkan, misalnya: kunci, semafor, kait, benda atom, aturan sinkronisasi dll ...
sumber