คำถามติดแท็ก locking

การล็อกช่วยให้สามารถใช้ทรัพยากรประเภทต่างๆได้ทีละกระบวนการ

9
ตรวจสอบและล็อค
เมื่อใดจึงเหมาะสมที่จะใช้Monitorคลาสหรือlockคีย์เวิร์ดเพื่อความปลอดภัยของเธรดใน C # แก้ไข: ดูเหมือนว่าจากคำตอบที่ผ่านมาlockนั้นสั้นสำหรับชุดของการโทรไปยังMonitorชั้นเรียน กุญแจล็อคสายสั้นมีไว้เพื่ออะไร? หรือชัดเจนกว่านั้น class LockVsMonitor { private readonly object LockObject = new object(); public void DoThreadSafeSomethingWithLock(Action action) { lock (LockObject) { action.Invoke(); } } public void DoThreadSafeSomethingWithMonitor(Action action) { // What goes here ? } } อัปเดต ขอบคุณทุกคนสำหรับความช่วยเหลือ: ฉันได้โพสต์คำถามอื่นเพื่อติดตามข้อมูลบางส่วนที่คุณให้มา เนื่องจากคุณดูเหมือนจะมีความเชี่ยวชาญในด้านนี้เป็นอย่างดีฉันจึงโพสต์ลิงก์: มีอะไรผิดปกติกับวิธีแก้ปัญหานี้ในการล็อกและจัดการข้อยกเว้นที่ถูกล็อก


3
lock (วัตถุใหม่ ()) - ลัทธิขนส่งสินค้าหรือ "กรณีพิเศษทางภาษา" ที่บ้าคลั่ง?
ฉันกำลังตรวจสอบโค้ดบางส่วนที่เขียนโดยที่ปรึกษาและในขณะที่มีธงสีแดงหลายสิบอันโผล่ขึ้นมาแล้วฉันไม่สามารถคาดเดาข้อมูลโค้ดต่อไปนี้ได้: private void foo() { if (InvokeRequired) { lock (new object()) { if (m_bar!= null) Invoke(new fooDelegate(foo), new object[] { }); } } else { if(OnBazChanged != null) OnBazChanged(); } } lock (วัตถุใหม่ ()) กำลังทำอะไรที่นี่ ไม่ควรมีผลกระทบใด ๆ เนื่องจากมักจะล็อกวัตถุอื่นอยู่เสมอ แต่การล็อกแบบนี้จะคงอยู่ตลอดทั้งรหัสแม้ในส่วนที่ไม่ได้คัดลอกและวาง นี่เป็นกรณีพิเศษบางอย่างในภาษา C # ที่รวบรวมสิ่งที่ฉันไม่รู้หรือโปรแกรมเมอร์เพิ่งนำลัทธิขนส่งสินค้าบางอย่างที่เกิดขึ้นเมื่อไม่นานมานี้มาใช้?

6
วัตถุที่ถูกล็อกจะยังคงถูกล็อกอยู่หรือไม่หากเกิดข้อยกเว้นขึ้นภายใน
ในแอพ ac # threading ถ้าฉันจะล็อคอ็อบเจกต์ให้เราพูดคิวและถ้ามีข้อยกเว้นเกิดขึ้นอ็อบเจกต์จะยังคงล็อคอยู่หรือไม่ นี่คือรหัสหลอก: int ii; lock(MyQueue) { MyClass LclClass = (MyClass)MyQueue.Dequeue(); try { ii = int.parse(LclClass.SomeString); } catch { MessageBox.Show("Error parsing string"); } } ตามที่ฉันเข้าใจรหัสหลังจากการจับไม่ได้ดำเนินการ - แต่ฉันสงสัยว่าการล็อกจะถูกปลดปล่อยหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.