日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是monitor

發(fā)布時(shí)間:2023/12/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是monitor 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是monitor
?


  monitor直譯過來是監(jiān)視器的意思,專業(yè)一點(diǎn)叫管程。monitor是屬于編程語言級(jí)別的,它的出現(xiàn)是為了解決操作系統(tǒng)級(jí)別關(guān)于線程同步原語的使用復(fù)雜性,類似于語法糖,對(duì)復(fù)雜操作進(jìn)行封裝。而java則基于monitor機(jī)制實(shí)現(xiàn)了它自己的線程同步機(jī)制,就是synchronized內(nèi)置鎖。

monitor的作用
?

  monitor的作用就是限制同一時(shí)刻,只有一個(gè)線程能進(jìn)入monitor框定的臨界區(qū),達(dá)到線程互斥,保護(hù)臨界區(qū)中臨界資源的安全,這稱為線程同步使得程序線程安全。同時(shí)作為同步工具,它也提供了管理進(jìn)程,線程狀態(tài)的機(jī)制,比如monitor能管理因?yàn)榫€程競爭未能第一時(shí)間進(jìn)入臨界區(qū)的其他線程,并提供適時(shí)喚醒的功能。

monitor的組成
?

  3.1 monitor對(duì)象

    monitor對(duì)象是monitor機(jī)制的核心,它本質(zhì)上是jvm用c語言定義的一個(gè)數(shù)據(jù)類型。對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)保存了線程同步所需的信息,比如保存了被阻塞的線程的列表,還維護(hù)了一個(gè)基于mutex的鎖,monitor的線程互斥就是通過mutex互斥鎖實(shí)現(xiàn)的。

  3.2 臨界區(qū)

    臨界區(qū)是被synchronized包裹的代碼塊,可能是個(gè)代碼塊,也可能是個(gè)方法。

  3.3 條件變量

    條件變量和下方wait signal方法的使用有密切關(guān)系 。在獲取鎖進(jìn)入臨界區(qū)之后,如果發(fā)現(xiàn)條件變量不滿足使用wait方法使線程阻塞,條件變量滿足后signal喚醒被阻塞線程。 tips:當(dāng)線程被signal喚醒之后,不是從wait那繼續(xù)執(zhí)行的,而是重新while循環(huán)一次判斷條件是否成立。參考

  3.4 定義在monitor對(duì)象上的wait() signal() signalAll()操作


monitorenter操作的目標(biāo)一定要是一個(gè)對(duì)象,類型是reference。Reference實(shí)際就是堆里的一個(gè)存放對(duì)象的地址。每個(gè)對(duì)象(reference)都有一個(gè)monitor對(duì)應(yīng),如果有其它的線程獲取了這個(gè)對(duì)象的monitor(),當(dāng)前的線程就要一直等待,直到獲得 monitor的線程放棄monitor,當(dāng)前的線程才有機(jī)會(huì)獲得monitor。
如果monitor沒有被任何線程獲取,那么當(dāng)前線程獲取這個(gè)monitor,把monitor的entry count設(shè)置為1。表示這個(gè)monitor被1個(gè)線程占用了.退出monitor時(shí)entry count減為0。
當(dāng)前線程獲取了monitor之后,會(huì)增加這個(gè)monitor的時(shí)間計(jì)數(shù),來記錄當(dāng)前線程占用了monitor多長時(shí)間。

總結(jié)

以上是生活随笔為你收集整理的什么是monitor的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。