คำถามเล็ก ๆ น้อย ๆ แต่ฉันไม่สามารถหาเอกสารอย่างเป็นทางการหรือแม้กระทั่งบล็อกความคิดเห็น / การอภิปรายเกี่ยวกับมัน
พูดง่ายๆ: เมื่อฉันมีวัตถุส่วนตัวซึ่งมีจุดประสงค์เพียงอย่างเดียวที่จะให้บริการส่วนตัว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
มันค่อนข้างแตกต่างกัน