[英]Exception : Object synchronization method was called from an unsynchronized block of code
[英]code throws Object synchronization method was called from an unsynchronized block of code
我正在編寫非常簡單的同步代碼,但我真的陷入了這個錯誤。 什么可能導致錯誤?
程序在 PulseAll(processingText) 的最后一行拋出錯誤
更新:在我的監控 class 中還有其他 function 由主線程 ProcessingText() 調用,它會導致問題嗎?
public void doWork(int threadTaskNumber)
{
while (!(bool)WorkDone)
{
lock (processingText)
{
while (vowelCounter != 3 && threadTaskNumber != 0)
{
Monitor.Wait(processingText);
}
if (!(bool)workDone)
{
switch (threadTaskNumber)
{
case 0:
processingText += 'A';
if (vowelCounter != 3)
vowelCounter++;
break;
case 1:
processingText += 'B';
break;
case 2:
processingText += 'C';
break;
}
if (++threadCounter == 15)
WorkDone = true;
}
Monitor.PulseAll(processingText);
}
}
}
public void ProcessingText()
{
lock (processingText)
{
Console.WriteLine(processingText);
}
}
拋出SynchronizationLockException
是因為在這兩行之間:
Monitor.Wait(processingText);
//...
Monitor.PulseAll(processingText);
...變量processingText
的值已更改。 因此Monitor.PulseAll
嘗試使用當前線程不擁有的鎖發送脈沖,因此您觀察到異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.