POSIX memungkinkan mutex bersifat rekursif. Itu berarti utas yang sama dapat mengunci mutex yang sama dua kali dan tidak akan menemui jalan buntu. Tentu saja itu juga perlu membuka kuncinya dua kali, jika tidak, tidak ada utas lain yang dapat memperoleh mutex. Tidak semua sistem yang mendukung pthreads juga mendukung mutex rekursif, tetapi jika mereka ingin menjadi POSIX, mereka harus melakukannya .
API lain (lebih banyak API tingkat tinggi) juga biasanya menawarkan mutex, sering disebut Kunci. Beberapa sistem / bahasa (misalnya Cocoa Objective-C) menawarkan mutex keduanya, rekursif dan non rekursif. Beberapa bahasa juga hanya menawarkan satu atau yang lain. Misal dalam Java mutex selalu bersifat rekursif (utas yang sama mungkin dua kali "menyinkronkan" pada objek yang sama). Bergantung pada fungsionalitas utas lainnya yang mereka tawarkan, tidak memiliki mutex rekursif mungkin tidak ada masalah, karena mereka dapat dengan mudah ditulis sendiri (saya sudah menerapkan sendiri mutex rekursif sendiri berdasarkan operasi mutex / kondisi yang lebih sederhana).
Apa yang tidak saya mengerti: Untuk apa mutex non-rekursif itu bagus? Mengapa saya ingin kebuntuan utas jika mengunci mutex yang sama dua kali? Bahkan bahasa tingkat tinggi yang dapat menghindari itu (misalnya menguji apakah ini akan menemui jalan buntu dan melemparkan pengecualian jika itu benar) biasanya tidak melakukan itu. Mereka akan membiarkan kebuntuan utas sebagai gantinya.
Apakah ini hanya untuk kasus-kasus, di mana saya secara tidak sengaja menguncinya dua kali dan hanya membukanya sekali dan dalam kasus mutex rekursif, akan lebih sulit untuk menemukan masalahnya, jadi alih-alih saya langsung menemui jalan buntu untuk melihat di mana kunci yang salah muncul? Tetapi tidak bisakah saya melakukan hal yang sama dengan mengembalikan penghitung kunci saat membuka kunci dan dalam situasi, di mana saya yakin saya melepaskan kunci terakhir dan penghitungnya tidak nol, saya bisa melempar pengecualian atau mencatat masalahnya? Atau apakah ada kasus penggunaan lain yang lebih berguna dari mutex non rekursif yang gagal saya lihat? Atau mungkin hanya kinerja, karena mutex non-rekursif bisa sedikit lebih cepat daripada yang rekursif? Namun, saya menguji ini dan perbedaannya tidak terlalu besar.