lock
คำสั่งแปลโดย C # 3.0 ต่อไปนี้:
var temp = obj;
Monitor.Enter(temp);
try
{
// body
}
finally
{
Monitor.Exit(temp);
}
ใน C # 4.0 มีการเปลี่ยนแปลงและตอนนี้มันถูกสร้างขึ้นดังนี้:
bool lockWasTaken = false;
var temp = obj;
try
{
Monitor.Enter(temp, ref lockWasTaken);
// body
}
finally
{
if (lockWasTaken)
{
Monitor.Exit(temp);
}
}
คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่Monitor.Enter
ไม่ที่นี่ วิธีอ้าง MSDN:
ใช้Enter
เพื่อรับการตรวจสอบบนวัตถุที่ส่งผ่านเป็นพารามิเตอร์ หากเธรดอื่นดำเนินการEnter
กับวัตถุ แต่ยังไม่ได้ดำเนินการที่เกี่ยวข้องExit
เธรดปัจจุบันจะบล็อกจนกว่าเธรดอื่นจะเผยแพร่วัตถุ เป็นเรื่องถูกกฎหมายสำหรับเธรดเดียวกันให้เรียกใช้
Enter
มากกว่าหนึ่งครั้งโดยไม่มีการบล็อก อย่างไรก็ตามExit
ต้องเรียกจำนวนเท่ากัน
ก่อนที่เธรดอื่น ๆ ที่รออยู่บนวัตถุจะปลดบล็อก
Monitor.Enter
วิธีการจะรออนันต์; มันจะไม่หมดเวลา