第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

制作實現(xiàn)讀\寫方法的同步數(shù)組

制作實現(xiàn)讀\寫方法的同步數(shù)組

C#
海綿寶寶撒 2022-12-24 09:45:59
我有一個包含以下字段的類:消息數(shù)組和當前消息數(shù)以及讀\寫方法。當有人寫入時,它會將消息放入數(shù)組并將當前消息數(shù)增加一個,當有人試圖讀取它時,它會先減少當前消息數(shù)然后返回最后一條消息。我想讓這個類同步,這樣它就允許線程從他那里寫入和讀取(當數(shù)組為空時,我希望線程會等到有東西可以讀?。┎⒎乐箶?shù)據競爭。我做了這個實現(xiàn)的類:   class SynchronizedDATAStructure : DATAStructure{    private Mutex mutexR = new Mutex();    private Mutex mutexW = new Mutex();    private Semaphore semaphore = new Semaphore(0, int.MaxValue);    private Semaphore semaphore2 = new Semaphore(1, 1);    public override void Write(Message msg)    {        mutexW.WaitOne(); // allows only one thread each time to write        semaphore2.WaitOne(); // checks if nobody is reading         base.Write(msg); // writing        semaphore.Release(); // counts number of messages        semaphore2.Release(); // finish to write        mutexW.ReleaseMutex(); // finish the function    }    public override Message Read()    {        mutexR.WaitOne(); // allows only one thread each time to read        semaphore.WaitOne();  // checks if there  are messages         semaphore2.WaitOne(); // checks if nobody is writing         Message msg1 = base.Read(); // reading        semaphore2.Release(); // finish to read        mutexR.ReleaseMutex(); // finish the function        return msg1; // returns the messge    }當線程開始寫\讀時,當線程試圖從空數(shù)組中讀取時,我得到了 outOfBounds。
查看完整描述

1 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

您可以使用以下方法使代碼更簡單Monitor:


class SynchronizedDATAStructure : DATAStructure

{

    private readonly object syncRoot = new object();


    public int MessageCount { get; private set; }


    public override void Write(Message msg)

    {

        lock (syncRoot)

        {

            base.Write(msg);

            MessageCount++;


            Monitor.Pulse(syncRoot);

        }

    }


    public override Message Read()

    {

        lock (syncRoot)

        {

            while (MessageCount <= 0)

            {

                Monitor.Wait(syncRoot);

            }


            MessageCount--;

            return base.Read();

        }

    }

}


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 77 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號