Mutex dan pantau

Java Multithreading
Tahap , pelajaran
Tersedia

"Hai, Amigo!"

"Dalam pelajaran saya sebelum ini, saya kadangkala menggunakan perkataan 'mutex' dan 'monitor', kini tiba masanya untuk memberitahu anda maksudnya."

"Saya semua telinga."

" Mutex ialah objek khas untuk menyegerakkan benang/proses. Ia mempunyai dua keadaan yang mungkin: sibuk dan bebas. Secara ringkasnya, mutex ialah pembolehubah boolean yang boleh mempunyai dua nilai: sibuk (benar) dan bebas (salah)."

"Apabila benang ingin mengambil pemilikan objek, ia menandakan muteks objek sebagai sibuk. Dan apabila ia selesai bekerja dengan objek, ia menandakan muteksnya sebagai bebas."

"Dalam erti kata lain, mutex adalah seperti tanda 'sibuk/bebas' di pintu?"

"Ya. Dan mutex seperti itu dikaitkan dengan setiap objek di Java. Hanya mesin Java yang mempunyai akses terus ke mutex. Ia tersembunyi daripada pengaturcara."

"Bagaimana kita menggunakannya?"

"Di Jawa, kita boleh bekerja dengan mutex melalui monitor."

"Monitor ialah mekanisme khas (sekeping kod) berlapis di atas mutex. Ia menjamin interaksi yang betul dengan mutex. Ia tidak mencukupi untuk menandakan objek sebagai sibuk. Ia masih perlu untuk memastikan bahawa benang lain tidak cuba gunakan objek yang sibuk."

"Di Java, monitor dilaksanakan menggunakan kata kunci yang disegerakkan."

"Apabila anda menulis blok yang disegerakkan, pengkompil Java menggantikannya dengan tiga keping kod:"

1) Pada permulaan blok yang disegerakkan, kod ditambahkan yang menandakan mutex sebagai sibuk.

2)  Pada penghujung blok yang disegerakkan, kod ditambah yang menandakan mutex sebagai percuma.

3)  Sebelum blok disegerakkan, kod ditambah yang, jika mutex sibuk, menyebabkan benang menunggu sehingga mutex dilepaskan.

"Begini kira-kira cara ia berfungsi:"

Kod Bagaimana ia berfungsi Penerangan
synchronized(object)
{

object.doJob();

}
while (object.mutex)
Thread.sleep(1);

object.mutex = true;

object.doJob();

object.mutex = false;

Benang tidur selagi mutex sibuk
(kami keluar dari gelung apabila mutex dilepaskan). Tandakan mutex sebagai sibuk.

Laksanakan doTask();

Tandakan mutex sebagai percuma

"Pada hakikatnya, logik di sana berbeza dan lebih rumit. Tetapi ini hanya butiran."

"Boleh saya dapatkan butirannya?"

"Sehingga anda belajar cara menggunakannya dengan betul, tidak ada gunanya anda terjerat dalam butirannya."

"Beberapa tahap di belakang saya memberi anda senarai semua keadaan benang dengan anak panah peralihan dan senarai kaedah yang mempengaruhi keadaan ini. Adakah anda masih ingat?"

"Tidak juga. Saya hanya melupakan segala-galanya dengan cepat…"

"Semakin kurang amalan yang anda lakukan, semakin kurang anda mendapat manfaat daripada teori itu."

"Menjelang Tahap 40, anda akan belajar cara menggunakan semua ini dan saya akan menerangkan bagaimana semua ini berfungsi. Sementara itu, hanya belajar untuk menggunakan semuanya dengan betul. Faham?"

"Ya, terima kasih, Ellie."

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION