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 LockingObjectsini? 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
SyncLockpernyataan VB yang setara ,SyncRootproperti 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:
thisLockdanlockThisdari 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
statickelas / 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
simpleMessageListcontoh denganmessagesLockobjek 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!
SynchronizationContextada sesuatu yang sangat berbeda.