Sebuah pertanyaan yang relatif kecil, tetapi saya belum dapat menemukan dokumentasi resmi atau bahkan pendapat / diskusi blog tentang itu.
Sederhananya: ketika saya memiliki objek pribadi yang tujuan utamanya adalah melayani untuk pribadi lock
, apa yang saya beri nama objek itu?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
Apa yang harus kita beri nama di LockingObject
sini? Juga pertimbangkan bukan hanya nama variabel tetapi bagaimana tampilannya dalam kode ketika mengunci.
Saya telah melihat berbagai contoh, tetapi tampaknya tidak ada saran masuk yang solid:
Banyak penggunaan
SyncRoot
(dan variasi seperti_syncRoot
).- Contoh kode:
lock(SyncRoot)
,lock(_syncRoot)
- Ini tampaknya dipengaruhi oleh
SyncLock
pernyataan VB yang setara ,SyncRoot
properti yang ada pada beberapa kelas ICollection dan bagian dari semacam pola desain SyncRoot (yang bisa dibilang adalah ide yang buruk) - Berada dalam konteks C #, tidak yakin apakah saya ingin memiliki penamaan VBish. Lebih buruk lagi, dalam VB penamaan variabel sama dengan kata kunci. Tidak yakin apakah ini akan menjadi sumber kebingungan atau tidak.
- Contoh kode:
thisLock
danlockThis
dari artikel MSDN: Pernyataan kunci C # , Pernyataan VB SyncLock- Contoh kode:
lock(thisLock)
,lock(lockThis)
- Tidak yakin apakah ini diberi nama minimal murni untuk contoh atau tidak
- Agak aneh jika kita menggunakan ini dalam
static
kelas / metode. - EDIT: Artikel Wikipedia tentang kunci juga menggunakan penamaan ini sebagai contohnya
- Contoh kode:
Beberapa penggunaan
PadLock
(dari berbagai casing)- Contoh kode:
lock(PadLock)
,lock(padlock)
- Tidak buruk, tetapi satu-satunya daging sapi saya adalah itu secara tidak mengejutkan memunculkan gambar "gembok" fisik yang saya cenderung tidak kaitkan dengan konsep threading abstrak .
- Contoh kode:
Memberi nama kunci berdasarkan apa yang ingin dikunci
- Contoh kode:
lock(messagesLock)
,lock(DictionaryLock)
,lock(commandQueueLock)
- Dalam contoh halaman VB SyncRoot MSDN, ia memiliki
simpleMessageList
contoh denganmessagesLock
objek pribadi - Saya tidak berpikir itu ide yang baik untuk memberi nama kunci terhadap jenis yang Anda kunci ("DictionaryLock") karena itu adalah detail implementasi yang dapat berubah. Saya lebih suka memberi nama di sekitar konsep / objek yang Anda kunci ("messagesLock" atau "commandQueueLock")
- Menariknya, saya sangat jarang melihat konvensi penamaan ini untuk mengunci objek dalam sampel kode online atau di StackOverflow.
- Contoh kode:
(EDIT) Spesifikasi C # di bawah bagian "8.12 Pernyataan Kunci" memiliki contoh pola ini dan menamainya
synchronizationObject
- Contoh kode:
lock(SynchronizationObject)
,lock(synchronizationObject)
- Contoh kode:
Pertanyaan: Apa pendapat Anda secara umum tentang penamaan swasta obyek penguncian?
Baru-baru ini, saya mulai menamai mereka ThreadLock
(jadi agak suka opsi 3), tetapi saya mendapati diri saya mempertanyakan nama itu.
Saya sering menggunakan pola penguncian ini (dalam contoh kode yang disediakan di atas) di seluruh aplikasi saya, jadi saya pikir mungkin masuk akal untuk mendapatkan pendapat / diskusi yang lebih profesional tentang konvensi penamaan yang solid untuk mereka. Terima kasih!
sumber
SynchronizationContext
ada sesuatu yang sangat berbeda.Saya biasanya menyebutnya
locker
, tetapi karena ini bersifat pribadi, saya percaya itu adalah detail implementasi yang agak tidak penting. Aturan praktis pertama, gunakan standar tim / perusahaan Anda. Jika tidak ada satu, yah, tolong buat dan gunakan, tapi untuk membuatnya, sederhanakan. Jika kelas Anda memiliki objek penguncian tunggal, memanggilnyafoo
cukup baik. Jika Anda memiliki banyak, urutan bisnis yang baik mungkin hanya meninjau kembali desain kelas itu terlebih dahulu untuk melihat apakah itu melakukan terlalu banyak hal yang berbeda. Tetapi, jika tidak, maka namanya menjadi penting, seperti dalam contoh yang benar-benar dibuat-buat ini:sumber
Saya selalu menggunakan lck_. Dengan begitu jika Anda ctrl + f 'lck' maka Anda hanya akan menemukan kunci sementara 'kunci' juga akan menemukan hal-hal seperti 'jam'.
Hal-hal seperti lockThis dan Gembok baik-baik saja untuk portofolio uni tetapi untuk proyek yang tepat Anda harus benar-benar menggunakan nama semantik sehingga ketika Anda melihat deklarasi Anda tahu apa objek sebenarnya tanpa mencari melalui kode.
sumber