我正在嘗試在 GUI 系統(tǒng)中的兩個線程之間同步。系統(tǒng)的主要任務(wù)是初始化兩個同步對象并運行兩個線程:private FetcherAPI fetcherAPI { get; set; }private FileReader fileReader { get; set; }private object readerLocker;private object writerLocker;public Form1() { InitializeComponent(); this.fetcherAPI = new FetcherAPI(); this.fileReader = new FileReader(); readerLocker = new object(); writerLocker = new object(); new Thread(() => { this.fileReader.run(readerLocker); }); new Thread(() => { this.fixerAPI.run(writerLocker, readerLocker); });}private void button1_Click(object sender, EventArgs e) { Monitor.Pulse(writerLocker);}讀者主題:public void run(object readerLocker) { while(true) { Monitor.Wait(readerLocker); readDataFromFileAndPresent(); }}作者主題:public void run(object writerLocker, object readerLocker) { while(true) { Monitor.Wait(writerLocker); fetchCurrency(); Monitor.Pulse(readerLocker); Monitor.Wait(readerLocker); }}當(dāng)按下按鈕時,我收到以下錯誤:object synchronization method was called from an unsynchronized block of code我究竟做錯了什么?
1 回答

慕姐8265434
TA貢獻1813條經(jīng)驗 獲得超2個贊
僅當(dāng)您已經(jīng)擁有鎖時(即您位于語句內(nèi),或者您已成功用于獲取鎖),Wait
才Pulse
可以調(diào)用兩者。你還沒有做過這兩件事,所以:確實,它不會起作用。最簡單的修復(fù)方法是添加一個.lock
Monitor.Enter
lock(writerLocker)
- 1 回答
- 0 關(guān)注
- 120 瀏覽
添加回答
舉報
0/150
提交
取消