Menggunakan Dispatch Barrier — iOS

Muhammad Muizzsuddin
2 min readNov 7, 2017

--

Hari ini saya belajar mengaplikasikan Dispatch Barrier untuk mengatur bagaimana concurency berjalan dan tidak menimbulkan readers-writers problem.

Ok langung saja. Post akan saya update kapan-kapan untuk menjelaskan Dispatch barrier lebih mendalam.

Misalkan kita dalam situasi dimana harus menyimpan file hasil edit foto. Ketika tombol save dieksekusi, kita tidak ingin membiarkan user menunggu terlalu lama untuk melakukan pekerjaan lain. Misal dia ingin mengedit foto lain…

But, masalahnya adalah aplikasi kita mempunya fitur yang sangat keren sehingga algoritma fotonya juga sangat mahal dan memakan waktu. Mungkin 5 detik? 10 detik? Sangat lama sekali bukan? Dan kita tidak ingin membuat user bosan dan menganggap aplikasi cacad.

Maka kita melakukan algoritma menyimpan di thread lain yang berjalan secara asynchronous concurret. Hebat! Penyimpanan akan dilakukan di background sementara user bisa melanjutkan pekerjaannya tanpa terhambat UI yang ‘macet’.

So far so good.

Masalah muncul saat kita juga mempunyai fungsi yang mengembalikan sebuah nilai dari data yang SEDANG kita simpan di belakang layar. Misal kita perlu menampilkan nama file foto yang sudah kita edit ke TableView untuk memberikan informasi pada user tentang foto tersebut. Fungsi itu dipanggil tepat setelah kita mengeksesuki tombol ‘Simpan’.

Dalam situasi saya tidak persis seperti ini. Namun hampir seperti yang telah saya buat contoh. Saat kita butuh untuk menampilkan informasi dari data, pada kenyataanya sistem sedang MELAKUKAN algoritma menulis data tadi ke memori di belakang layar. Algoritma menulis dan membaca tidak bisa dilakukan secara bersama karena dapat membuat thread error (tepatnya bukan error, tapi anggap saja begitu. Ingat akan saya edit nanti).

Disinilah Dispatch Barrier berjalan.

Dispatch Barrier memastikan bahwa saat program menjalankan perintah di thread yang di beri flag .barrier maka thread lain tidak akan berjalan. Dan disinilah kita akan menjaga agar data yang SEDANG kita tulis tidak diakses sebelum penulisan selesai.

Hufft. Bingung. Langsung saja bagaimana cara menulis kodenya.

Anggap variabel gajah harus diisi dari background concurrent dan variabel tersebut langsung dibaca setelah perintah pengisian.

--

--

No responses yet