Berbicara dalam konteks gim berbasis openGL renderer:
Mari kita asumsikan ada dua utas:
Memperbarui logika dan fisika game, dll. Untuk objek dalam game
Membuat panggilan draw openGL untuk setiap objek game berdasarkan data dalam objek game (utas 1 yang terus diperbarui)
Kecuali jika Anda memiliki dua salinan dari masing-masing objek game dalam keadaan saat ini dari permainan Anda harus menjeda Thread 1 sementara Thread 2 melakukan draw draw jika tidak, objek game akan diperbarui di tengah-tengah draw draw untuk objek tersebut, yang tidak diinginkan!
Tetapi menghentikan thread 1 untuk membuat panggilan draw dengan aman dari thread 2 membunuh seluruh tujuan multithreading / concurrency
Apakah ada pendekatan yang lebih baik untuk ini selain menggunakan ratusan atau ribuan atau menyinkronkan objek / pagar sehingga arsitektur multicore dapat dieksploitasi untuk kinerja?
Saya tahu saya masih bisa menggunakan multithreading untuk memuat tekstur dan mengkompilasi shader untuk objek yang belum menjadi bagian dari kondisi gim saat ini, tetapi bagaimana cara melakukannya untuk objek yang aktif / terlihat tanpa menyebabkan konflik dengan menggambar dan memperbarui?
Bagaimana jika saya menggunakan kunci sinkronisasi terpisah di setiap objek game? Dengan cara ini utas apa pun hanya akan memblokir pada satu objek (case ideal) daripada untuk seluruh siklus pembaruan / undian! Tetapi seberapa mahal mengambil kunci pada setiap objek (game mungkin memiliki seribu objek)?