คำถามเล็ก ๆ น้อย ๆ แต่ฉันไม่สามารถหาเอกสารอย่างเป็นทางการหรือแม้กระทั่งบล็อกความคิดเห็น / การอภิปรายเกี่ยวกับมัน
พูดง่ายๆ: เมื่อฉันมีวัตถุส่วนตัวซึ่งมีจุดประสงค์เพียงอย่างเดียวที่จะให้บริการส่วนตัวlockฉันจะตั้งชื่อวัตถุนั้นว่าอะไร
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
เราควรตั้งชื่อLockingObjectอะไรที่นี่? นอกจากนี้ให้พิจารณาไม่ใช่แค่ชื่อของตัวแปร แต่จะมีลักษณะอย่างไรเมื่ออยู่ในโค้ดเมื่อล็อค
ฉันเคยเห็นตัวอย่างหลายอย่าง แต่ดูเหมือนไม่มีคำแนะนำที่ชัดเจน
การใช้งานมากมาย
SyncRoot(และรูปแบบเช่น_syncRoot)- ตัวอย่างโค้ด:
lock(SyncRoot),lock(_syncRoot) - สิ่งนี้ดูเหมือนจะได้รับอิทธิพลจาก
SyncLockคำสั่งที่เทียบเท่าของ VBSyncRootคุณสมบัติที่มีอยู่ในคลาส ICollection บางส่วนและเป็นส่วนหนึ่งของรูปแบบการออกแบบ SyncRoot บางประเภท(ซึ่งเป็นแนวคิดที่ไม่ดี) - อยู่ในบริบท C # ไม่แน่ใจว่าฉันต้องการตั้งชื่อ VBish หรือไม่ ยิ่งแย่ลงใน VB การตั้งชื่อตัวแปรเช่นเดียวกับคำหลัก ไม่แน่ใจว่านี่จะเป็นแหล่งที่มาของความสับสนหรือไม่
- ตัวอย่างโค้ด:
thisLockและlockThisจากบทความ MSDN: C # lock Statement , VB SyncLock Statement- ตัวอย่างโค้ด:
lock(thisLock),lock(lockThis) - ไม่แน่ใจว่าสิ่งเหล่านี้ถูกตั้งชื่ออย่างน้อยที่สุดสำหรับตัวอย่างหรือไม่
- ค่อนข้างแปลกถ้าเราใช้สิ่งนี้ภายใน
staticคลาส / วิธีการ - แก้ไข: บทความ Wikipedia ที่ล็อคยังใช้การตั้งชื่อนี้เป็นตัวอย่าง
- ตัวอย่างโค้ด:
หลายประเพณีของ
PadLock(จากปลอกที่แตกต่างกัน)- ตัวอย่างโค้ด:
lock(PadLock),lock(padlock) - ไม่ดี แต่เนื้อเดียวของฉันมันน่าแปลกใจที่จะเรียกภาพที่ทางกายภาพ "กุญแจ" ซึ่งผมมักจะไม่เชื่อมโยงกับแนวคิดเกลียวนามธรรม
- ตัวอย่างโค้ด:
การตั้งชื่อล็อคตามสิ่งที่ตั้งใจจะล็อค
- ตัวอย่างรหัส:
lock(messagesLock),lock(DictionaryLock),lock(commandQueueLock) - ในตัวอย่างหน้า VB SyncRoot MSDN นั้นมี
simpleMessageListตัวอย่างที่เป็นแบบส่วนตัวmessagesLockวัตถุ - ฉันไม่คิดว่าเป็นความคิดที่ดีที่จะตั้งชื่อการล็อกกับประเภทที่คุณล็อคอยู่ ("DictionaryLock") เนื่องจากเป็นรายละเอียดการนำไปปฏิบัติที่อาจมีการเปลี่ยนแปลง ฉันชอบตั้งชื่อรอบแนวคิด / วัตถุที่คุณกำลังล็อค ("messagesLock" หรือ "commandQueueLock")
- ที่น่าสนใจคือฉันไม่ค่อยเห็นแบบแผนการตั้งชื่อนี้สำหรับล็อควัตถุในตัวอย่างโค้ดออนไลน์หรือใน StackOverflow
- ตัวอย่างรหัส:
(แก้ไข) ข้อมูลจำเพาะ C # ภายใต้หัวข้อ "8.12 คำแถลงการล็อค" มีตัวอย่างของรูปแบบนี้และตั้งชื่อ
synchronizationObject- ตัวอย่างโค้ด:
lock(SynchronizationObject),lock(synchronizationObject)
- ตัวอย่างโค้ด:
คำถาม: อะไรคือความคิดเห็นของคุณโดยทั่วไปเกี่ยวกับการตั้งชื่อส่วนตัววัตถุล็อค?
เมื่อเร็ว ๆ นี้ฉันได้เริ่มตั้งชื่อพวกเขาThreadLock(ดังนั้นชอบตัวเลือกที่ 3) แต่ฉันพบว่าตัวเองถามชื่อนั้น
ฉันมักจะใช้รูปแบบการล็อคนี้ (ในตัวอย่างโค้ดที่ให้ไว้ด้านบน) ตลอดทั้งแอปพลิเคชันของฉันดังนั้นฉันคิดว่ามันสมเหตุสมผลที่จะได้รับความเห็น / การอภิปรายเกี่ยวกับการตั้งชื่อที่มั่นคงสำหรับพวกเขา ขอบคุณ!
SynchronizationContextมันค่อนข้างแตกต่างกัน