Dengan versi standar POSIX yang lebih lama, metode pertama dengan penginisialisasi hanya dijamin untuk bekerja dengan variabel yang dialokasikan secara statis, bukan jika variabel tersebut adalah auto
variabel yang ditentukan dalam badan fungsi. Meskipun saya belum pernah melihat platform di mana hal ini tidak diizinkan, bahkan untuk auto
variabel, dan batasan ini telah dihapus dalam versi terbaru dari standar POSIX.
The static
varian benar-benar lebih baik jika Anda dapat, karena memungkinkan untuk menulis kode bootstrap jauh lebih mudah. Kapanpun pada waktu proses Anda memasukkan kode yang menggunakan mutex seperti itu, Anda dapat yakin bahwa mutex tersebut diinisialisasi. Ini adalah informasi berharga dalam konteks multi-threading.
Metode yang menggunakan fungsi init lebih disukai ketika Anda memerlukan properti khusus untuk mutex Anda, seperti rekursif misalnya atau dapat dibagikan antar proses, tidak hanya di antara utas.
malloc()
(atau milik objek yang dialokasikan).Saya ingin mengutip ini dari buku ini :
sumber
Dalam kasus di mana atribut mutex default sesuai, makro PTHREAD_MUTEX_INITIALIZER dapat digunakan untuk menginisialisasi mutex.
Jika Anda ingin menentukan atribut untuk mutex, gunakan inisialisasi dinamis ........
Efeknya harus setara dengan inisialisasi dinamis dengan panggilan ke pthread_mutex_init () dengan parameter attrspecified sebagai NULL, kecuali bahwa tidak ada pemeriksaan kesalahan yang dilakukan.
sumber