Rumah >pembangunan bahagian belakang >C++ >Adakah Baris Penampan Pekeliling Benar-benar Bebas Kunci Jika Operasi PUSH Boleh Menyekat Operasi POP?
Bolehkah Baris Beratur Bebas Kunci jika Operasi PUSH Boleh Menyekat Operasi POP?
Anekdot, "tanpa kunci" sering tersilap digunakan bermaksud "pengaturcaraan serentak tanpa mutexes." Algoritma tanpa kunci sebenarnya memberikan jaminan kemajuan tanpa mengira tindakan urutan lain. Ini bermakna tiada kod yang mana satu urutan bergantung pada yang lain untuk meneruskan.
Pertimbangkan baris gilir penimbal bulat dalam liblfds, yang bertujuan untuk konkurensi tanpa mutex yang jelas. Algoritma PUSH melibatkan menempah slot dengan membandingkan indeks tulis dan mengemas kini nombor urutan. Walaupun cekap dengan satu CAS, ia menimbulkan persoalan tentang bebas kunci.
Di satu pihak, benang sentiasa boleh beratur jika slot tersedia. Tetapi sebaliknya, jika operasi PUSH terganggu sebelum mengemas kini nombor jujukan, operasi POP seterusnya akan gagal, menjadikan baris gilir kelihatan kosong.
Di bawah takrifan bebas kunci sebagai "struktur boleh digunakan jika sebarang utas digantung selama-lamanya," baris gilir ini tidak sepenuhnya bebas kunci. Ia mempunyai mekanisme mutex tersembunyi (indeks tulis dan nombor urutan), di mana penulis boleh gagal memasukkan elemen disebabkan oleh penulis yang digantung di kawasan kritikal.
Walau bagaimanapun, baris gilir mungkin masih menunjukkan beberapa sifat berguna. Ia mempunyai prestasi tanpa saingan yang munasabah kerana overhednya yang rendah, mengendalikan prestasi saingan dengan munasabah dan kebal penukar konteks sebahagiannya. Selain itu, ia menyokong akses baris gilir daripada gangguan atau isyarat, walaupun ia mempunyai had dalam mengendalikan penamatan benang tak segerak.
Walaupun baris gilir liblfds mungkin tidak memenuhi sepenuhnya definisi ketat bebas kunci, ia mungkin masih bermanfaat untuk sesetengah pihak. aplikasi. Ia menyediakan jaminan kemajuan separa dan ciri prestasi yang baik, tanpa kerumitan penyelesaian berasaskan mutex.
Atas ialah kandungan terperinci Adakah Baris Penampan Pekeliling Benar-benar Bebas Kunci Jika Operasi PUSH Boleh Menyekat Operasi POP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!