Hiện tại, tôi đang học cho một bài kiểm tra đa luồng. Tôi đọc the good threading article of albahari. Tôi đã có một câu hỏi tại việc sử dụng màn hình - tại sao ở đây được sử dụng một vòng lặp ở vị trí của một nếu?Monitor.Wait - trong khi hoặc nếu?
lock (_locker)
{
while (!_go) //why while and not if?
Monitor.Wait (_locker); // _lock is released
// lock is regained
...
}
Tôi nghĩ, nếu đủ sẽ đủ.
Tôi sợ rằng tôi không hiểu hoàn toàn bài viết.
// Sửa Ví dụ-Code:
class SimpleWaitPulse
{
static readonly object _locker = new object();
static bool _go;
static void Main()
{ // The new thread will block
new Thread (Work).Start(); // because _go==false.
Console.ReadLine(); // Wait for user to hit Enter
lock (_locker) // Let's now wake up the thread by
{ // setting _go=true and pulsing.
_go = true;
Monitor.Pulse (_locker);
}
}
static void Work()
{
lock (_locker)
while (!_go)
Monitor.Wait (_locker); // Lock is released while we’re waiting
Console.WriteLine ("Woken!!!");
}
}
"Nếu" chỉ kiểm tra một lần. Vòng lặp "while" sẽ tiếp tục kiểm tra. Nếu không đợi. Trong khi chờ đợi. – DOK
Xin chào DOK - cảm ơn lời giải thích của bạn. Nhưng tôi nghĩ, hoạt động Monitor.Wait sẽ chỉ được thực thi một lần. Nó sẽ chờ tín hiệu Pulse. Vì vậy, tôi thấy không có lý do cho một thời gian :-( – bitsmuggler
Nó phụ thuộc vào phần còn lại của chương trình, giống như những gì chính xác là '_go' nghĩa vụ phải có nghĩa là, và khi nào bạn thiết lập nó – svick