Dalam pemrograman manajemen data, kontrol konkurensi adalah mekanisme yang dirancang untuk memastikan bahwa hasil yang akurat dihasilkan oleh operasi bersamaan. Hasil tersebut juga harus diperoleh pada waktu yang tepat. Kontrol konkurensi sangat sering terlihat di database di mana ada cache informasi yang dapat dicari untuk diperoleh pengguna.
Pemrogram mencoba merancang database sedemikian rupa sehingga efek transaksi penting pada data bersama akan setara secara serial. Artinya, data yang melakukan kontak dengan kumpulan transaksi akan berada dalam keadaan tertentu di mana hasilnya dapat diperoleh jika semua transaksi dijalankan secara berurutan dan dalam urutan tertentu. Terkadang data tersebut tidak valid karena diubah oleh dua transaksi secara bersamaan.
Ada beberapa cara untuk memastikan bahwa transaksi dijalankan satu demi satu, termasuk penggunaan pengecualian bersama serta menciptakan sumber daya yang memutuskan transaksi mana yang memiliki akses. Ini berlebihan, bagaimanapun, dan tidak akan memungkinkan programmer untuk mendapatkan keuntungan dari kontrol konkurensi dalam sistem terdistribusi. Kontrol konkurensi memungkinkan eksekusi simultan dari beberapa transaksi sambil menjaga transaksi ini menjauh satu sama lain, memastikan linearizability. Salah satu cara untuk menerapkan kontrol konkurensi adalah penggunaan kunci eksklusif pada sumber daya tertentu untuk eksekusi transaksi serial yang berbagi sumber daya. Transaksi akan mengunci objek yang dimaksudkan untuk digunakan, dan jika beberapa transaksi lain meminta objek yang dikunci, transaksi tersebut harus menunggu objek dibuka.
Implementasi metode ini dalam sistem terdistribusi melibatkan manajer kunci — server yang mengeluarkan kunci sumber daya. Ini sangat mirip dengan server untuk pengecualian bersama yang terpusat, di mana klien dapat meminta kunci dan mengirim pesan untuk melepaskan kunci pada sumber daya tertentu. Pelestarian eksekusi serial, bagaimanapun, masih diperlukan untuk kontrol konkurensi. Jika dua transaksi terpisah mengakses kumpulan objek yang serupa, hasilnya harus serupa dan seolah-olah transaksi ini dieksekusi dalam urutan tertentu. Untuk memastikan ketertiban akses ke sumber daya, penguncian dua fase diperkenalkan, yang berarti bahwa transaksi tidak diperbolehkan mengunci baru setelah pelepasan kunci terpisah.
Dalam penguncian dua fase untuk kontrol konkurensi, fase awalnya dianggap sebagai fase pertumbuhan, di mana transaksi memperoleh kunci yang dibutuhkan. Fase berikutnya dianggap sebagai fase menyusut, di mana kuncinya dilepaskan dari transaksi. Ada masalah dengan jenis penguncian ini. Jika transaksi dibatalkan, transaksi lain mungkin menggunakan data dari objek yang dimodifikasi dan dibuka kuncinya oleh transaksi yang dibatalkan. Ini akan mengakibatkan transaksi lain dibatalkan.