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

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

9
ระเหยกับลูกโซ่กับล็อค
สมมติว่าคลาสมีpublic int counterฟิลด์ที่เข้าถึงได้โดยหลายเธรด นี่intเป็นเพียงการเพิ่มหรือลดเท่านั้น หากต้องการเพิ่มฟิลด์นี้ควรใช้วิธีการใดและเพราะเหตุใด lock(this.locker) this.counter++;, Interlocked.Increment(ref this.counter);, เปลี่ยนการปรับปรุงการเข้าถึงการcounterpublic volatile ตอนนี้ที่ผมได้ค้นพบvolatileฉันได้รับการลบหลายงบและการใช้งานของlock Interlockedแต่มีเหตุผลที่จะไม่ทำเช่นนี้หรือไม่?

10
การมองโลกในแง่ดีกับการมองโลกในแง่ร้าย
ฉันเข้าใจความแตกต่างระหว่างการล็อคในแง่ดีและมองโลกในแง่ร้าย ตอนนี้มีใครบางคนสามารถอธิบายให้ฉันเมื่อฉันจะใช้ทั้งสองโดยทั่วไป? และคำตอบของคำถามนี้จะเปลี่ยนไปหรือไม่ขึ้นอยู่กับว่าฉันใช้กระบวนงานที่เก็บไว้เพื่อดำเนินการค้นหาหรือไม่ แต่เพียงเพื่อตรวจสอบในแง่ดีหมายถึง "ไม่ล็อคตารางในขณะที่อ่าน" และมองโลกในแง่ร้ายหมายถึง "ล็อคตารางในขณะที่อ่าน"

8
ล็อคทำงานอย่างไร
ฉันเห็นว่าสำหรับการใช้วัตถุที่ไม่ปลอดภัยเธรดเราห่อรหัสด้วยล็อคเช่นนี้ private static readonly Object obj = new Object(); lock (obj) { // thread unsafe code } ดังนั้นจะเกิดอะไรขึ้นเมื่อหลายเธรดเข้าถึงรหัสเดียวกัน (สมมติว่ามันกำลังทำงานอยู่ในเว็บแอปพลิเคชัน ASP.NET) พวกเขาเข้าคิวหรือไม่ ถ้าเป็นเช่นนั้นพวกเขาจะรอนานแค่ไหน? ประสิทธิภาพการทำงานมีผลกระทบอะไรบ้างจากการใช้ระบบล็อค?

16
เหตุใดล็อค (นี่) {…} ไม่ดี
MSDN เอกสารกล่าวว่า public class SomeObject { public void SomeOperation() { lock(this) { //Access instance variables } } } คือ "ปัญหาหากอินสแตนซ์สามารถเข้าถึงได้แบบสาธารณะ" ฉันสงสัยว่าทำไม เป็นเพราะล็อคจะถูกเก็บไว้นานเกินความจำเป็น? หรือมีเหตุผลที่ร้ายกาจกว่านี้อีกไหม?


23
มีข้อได้เปรียบในการใช้วิธีการซิงโครไนซ์แทนที่จะบล็อกแบบซิงโครไนซ์หรือไม่
ใครสามารถบอกข้อดีของวิธีการซิงโครไนซ์กับบล็อกซิงโครไนซ์กับตัวอย่างได้หรือไม่?

7
การปลุกกลอุบายใน Java เกิดขึ้นจริงหรือไม่?
เห็นคำถามที่เกี่ยวข้องกับการล็อคต่าง ๆ และ (เกือบ) มักจะหาคำว่า 'ห่วงเพราะของการปลุกซ้ำ' 1ฉันสงสัยว่ามีใครเคยมีประสบการณ์การปลุกดังกล่าวบ้าง (สมมติว่าเป็นตัวอย่างของฮาร์ดแวร์ / ซอฟต์แวร์ที่เหมาะสม) ฉันรู้ว่าคำว่า 'ปลอม' หมายถึงไม่มีเหตุผลที่ชัดเจน แต่อะไรคือสาเหตุของเหตุการณ์ดังกล่าว ( 1หมายเหตุ: ผมไม่ได้ตั้งคำถามการปฏิบัติวนลูป.) แก้ไข:คำถามที่ผู้ช่วย (สำหรับผู้ที่ชอบตัวอย่างโค้ด): หากฉันมีโปรแกรมต่อไปนี้และฉันเรียกใช้: public class Spurious { public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition cond = lock.newCondition(); lock.lock(); try { try { cond.await(); System.out.println("Spurious wakeup!"); } catch (InterruptedException …

5
ผลกระทบของคำใบ้ NOLOCK ในคำสั่ง SELECT
ฉันเดาคำถามจริงคือ: หากฉันไม่สนใจเกี่ยวกับการอ่านที่สกปรกจะเพิ่มคำแนะนำด้วย (NOLOCK) ในคำสั่ง SELECT ที่มีผลต่อประสิทธิภาพของ: คำสั่ง SELECT ปัจจุบัน การทำธุรกรรมอื่น ๆ กับตารางที่กำหนด ตัวอย่าง: Select * from aTable with (NOLOCK)
199 sql  sql-server  locking 

11
Java วิธีการทำข้อมูลให้ตรงกันล็อคกับวัตถุหรือวิธี?
ถ้าฉันมีวิธีการซิงโครไนส์ 2 วิธีในคลาสเดียวกัน แต่แต่ละวิธีเข้าถึงตัวแปรที่แตกต่างกัน 2 เธรดสามารถเข้าถึง 2 วิธีเหล่านั้นในเวลาเดียวกันได้หรือไม่ ล็อคเกิดขึ้นกับวัตถุหรือมีความเฉพาะเจาะจงกับตัวแปรภายในวิธีการซิงโครไนซ์หรือไม่? ตัวอย่าง: class X { private int a; private int b; public synchronized void addA(){ a++; } public synchronized void addB(){ b++; } } 2 เธรดสามารถเข้าถึงอินสแตนซ์เดียวกันของคลาส X ที่มีประสิทธิภาพx.addA() และx.addB()ในเวลาเดียวกันได้หรือไม่

7
Recursive Lock (Mutex) กับ Non-Recursive Lock (Mutex)
POSIX อนุญาตให้ mutexes วนซ้ำ นั่นหมายความว่าเธรดเดียวกันสามารถล็อค mutex เดียวกันสองครั้งและจะไม่หยุดชะงัก แน่นอนว่ามันต้องปลดล็อคสองครั้งมิฉะนั้นจะไม่มีเธรดอื่นที่สามารถรับ mutex ได้ ไม่ได้ทุกระบบสนับสนุน pthreads ยังสนับสนุน mutexes recursive แต่ถ้าพวกเขาต้องการที่จะPOSIX สอดคล้องพวกเขาจะต้อง API อื่น ๆ (API ระดับสูงกว่า) มักจะเสนอ mutexes ซึ่งมักเรียกว่าล็อค ระบบ / ภาษาบางระบบ (เช่น Cocoa Objective-C) เสนอทั้ง mutex แบบเรียกซ้ำและไม่เรียกซ้ำ บางภาษาเสนอเพียงหนึ่งภาษาเท่านั้น เช่นใน Java mutexes จะเรียกซ้ำ (เธรดเดียวกันอาจสองครั้ง "ซิงโครไนซ์" บนวัตถุเดียวกัน) ขึ้นอยู่กับฟังก์ชันเธรดอื่น ๆ ที่พวกเขาเสนอการไม่มี mutexes แบบเรียกซ้ำอาจไม่มีปัญหาเนื่องจากพวกเขาสามารถเขียนได้อย่างง่ายดายด้วยตัวคุณเอง สิ่งที่ฉันไม่เข้าใจจริง ๆ : …

7
ความแตกต่างระหว่างตัวเลือกการซิงโครไนซ์เธรดต่าง ๆ ใน C # คืออะไร
บางคนสามารถอธิบายความแตกต่างระหว่าง: ล็อค (someobject) {} ใช้ Mutex ใช้เซมาฟอร์ ใช้การตรวจสอบ ใช้คลาสการซิงโครไนซ์. Net อื่น ๆ ฉันแค่คิดออกไม่ได้ ดูเหมือนว่าฉันสองคนแรกเหมือนกันหรือไม่

17
การหยุดชะงักคืออะไร
เมื่อเขียนแอพพลิเคชั่นแบบมัลติเธรดหนึ่งในปัญหาที่พบบ่อยที่สุดคือการหยุดชะงัก คำถามของฉันต่อชุมชนคือ: การหยุดชะงักคืออะไร คุณตรวจจับพวกมันได้อย่างไร คุณจัดการกับพวกเขา? และในที่สุดคุณจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

4
std :: lock_guard หรือ std :: scoped_lock?
C ++ 17 แนะนำคลาสล็อคใหม่ที่เรียกว่าstd::scoped_lock. เมื่อพิจารณาจากเอกสารแล้วจะดูเหมือนกับstd::lock_guardคลาสที่มีอยู่แล้ว อะไรคือความแตกต่างและฉันควรใช้เมื่อใด?

5
HashSet พร้อมกันใน. NET Framework
ฉันมีคลาสต่อไปนี้ class Test{ public HashSet<string> Data = new HashSet<string>(); } ฉันต้องการเปลี่ยนฟิลด์ "ข้อมูล" จากเธรดที่แตกต่างกันดังนั้นฉันต้องการความคิดเห็นบางส่วนเกี่ยวกับการใช้งานเธรดที่ปลอดภัยในปัจจุบัน class Test{ public HashSet<string> Data = new HashSet<string>(); public void Add(string Val){ lock(Data) Data.Add(Val); } public void Remove(string Val){ lock(Data) Data.Remove(Val); } } มีวิธีแก้ปัญหาที่ดีกว่าไปยังฟิลด์โดยตรงและป้องกันไม่ให้เข้าถึงหลายเธรดพร้อมกันหรือไม่

5
การล็อก mutex ที่ปลดล็อกมีประสิทธิภาพเพียงใด Mutex มีราคาเท่าใด
ในภาษาระดับต่ำ (C, C ++ หรืออะไรก็ตาม): ฉันมีตัวเลือกระหว่างการมี mutexes หลายอัน (เช่น pthread ให้ฉันหรืออะไรก็ตามที่ไลบรารี่ของระบบดั้งเดิมจัดหาให้) หรืออันเดียวสำหรับวัตถุ มันมีประสิทธิภาพแค่ไหนในการล็อค mutex? คือมีกี่คำสั่งแอสเซมเบลอร์และโอกาสที่จะใช้เวลาเท่าไหร่ (ในกรณีที่มีการปลดล็อค mutex) Mutex มีค่าใช้จ่ายเท่าไหร่ เป็นปัญหาหรือไม่ที่จะมีmutex จำนวนมากจริงๆ หรือฉันสามารถโยนตัวแปร mutex ให้มากที่สุดเท่าที่ฉันมีได้ในintตัวแปรและมันก็ไม่สำคัญอะไร (ฉันไม่แน่ใจว่าความแตกต่างระหว่างฮาร์ดแวร์ต่างกันมากแค่ไหนถ้ามีฉันอยากรู้เกี่ยวกับมันด้วย แต่ส่วนใหญ่ฉันสนใจฮาร์ดแวร์ทั่วไป) ประเด็นก็คือโดยการใช้ mutex หลายตัวซึ่งแต่ละส่วนครอบคลุมเพียงส่วนหนึ่งของวัตถุแทนที่จะเป็น mutex เดียวสำหรับวัตถุทั้งหมดฉันสามารถป้องกันได้หลายบล็อก และฉันสงสัยว่าฉันควรจะไปไกลแค่ไหนกับเรื่องนี้ คือฉันควรพยายามที่จะป้องกันบล็อคที่เป็นไปได้จริง ๆ เท่าที่จะเป็นไปได้ไม่ว่าจะซับซ้อนกว่านี้มากเท่าใด การโพสต์บล็อกของ WebKits (2016) เกี่ยวกับการล็อคนั้นเกี่ยวข้องกับคำถามนี้มากและอธิบายความแตกต่างระหว่าง spinlock, ล็อคปรับตัว, futex และอื่น ๆ

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