C# Wait怎樣避免虛假喚醒

c#
小樊
84
2024-06-25 01:29:27

在C#中,使用Monitor.Wait()方法時(shí),可以通過(guò)在while循環(huán)中檢查條件來(lái)避免虛假喚醒。虛假喚醒是指在多線程環(huán)境下,一個(gè)線程被喚醒但實(shí)際上并沒(méi)有符合條件。

下面是一個(gè)簡(jiǎn)單的示例代碼,演示如何避免虛假喚醒:

Object lockObj = new Object();
bool condition = false;

// 等待條件符合
lock (lockObj)
{
    while (!condition)
    {
        Monitor.Wait(lockObj);
    }
}

// 喚醒其他線程
lock (lockObj)
{
    condition = true;
    Monitor.Pulse(lockObj);
}

在上面的代碼中,使用while循環(huán)來(lái)檢查條件是否符合,如果條件不符合,則繼續(xù)等待。這樣可以避免虛假喚醒。另外,在喚醒其他線程之前,需要先設(shè)置條件為true,然后再調(diào)用Monitor.Pulse()方法來(lái)喚醒其他線程。

通過(guò)這種方式,可以確保線程在被喚醒時(shí)條件確實(shí)是符合的,避免了虛假喚醒的問(wèn)題。

0