Pemprosesan Berbilang: Menangani Penyegerakan dan Perkongsian Data dalam Kamus Global
Dalam persekitaran berbilang benang, pengendalian akses serentak data dan mengekalkan penyegerakan menjadi penting. Pertimbangkan program dengan berbilang proses kanak-kanak yang berfungsi pada baris gilir dan memanipulasi kamus global, D.
Apabila proses kanak-kanak mengubah suai D, kemas kini ini boleh dilihat dalam proses tersebut. Walau bagaimanapun, selepas proses utama menyertai baris gilir, pencetakan D dalam proses utama mendedahkan kamus kosong. Ini disebabkan oleh isu penyegerakan dalam mengakses sumber yang dikongsi, D.
Untuk menyelesaikannya, objek Pengurus boleh digunakan. Kelas Pengurus dalam pelbagai pemprosesan membolehkan penciptaan dan pengurusan objek kongsi, termasuk kamus. Kod python terlaras berikut menunjukkan penggunaannya:
from multiprocessing import Process, Manager def f(d): d[1] += '1' d['2'] += 2 if __name__ == '__main__': manager = Manager() d = manager.dict() d[1] = '1' d['2'] = 2 p1 = Process(target=f, args=(d,)) p2 = Process(target=f, args=(d,)) p1.start() p2.start() p1.join() p2.join() print(d)
Dengan menggunakan objek Pengurus, kamus kongsi, D, disimpan dalam lokasi memori kongsi yang boleh diakses oleh semua proses. Ini memastikan penyegerakan dan menghalang keadaan perlumbaan dalam mengakses kamus, walaupun merentasi pelbagai proses.
Menjalankan kod yang diubah suai ini harus menghasilkan output berikut:
{1: '111', '2': 6}
menunjukkan bahawa pengubahsuaian yang dibuat oleh proses kanak-kanak dalam kamus kongsi kelihatan dan berterusan walaupun selepas menyertai proses.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memastikan ketekalan data dalam kamus global yang diakses oleh pelbagai proses kanak-kanak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!