• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0
            轉發請注明出處:http://m.shnenglu.com/mysileng/admin/EditPosts.aspx?postid=196971
                剛寫了程序發現點問題。假設一個程序有多個線程,有一個全局互斥鎖M....在某線程A獲得鎖以后,這個時候來了一個信號(假設這個信號注冊了自己的處理程序),那么需要進入信號處理程序,進入以后信號處理處理程序也要獲得這個鎖。問題來了?會死鎖么?
                我們知道同一線程如果重復申請同一個互斥鎖那么必然會死鎖?這里問題轉換到信號處理函數跟之前的線程A會是同一個線程上下文么(即是同一個線程么)?我們試驗一下。實驗之前需要明確幾點:
                1.根據APUE 12.8,進程的處理函數與處理方式是進程中所有線程共享的。
                2.根據APUE 12.8,如果進程接收到信號,該信號只會被遞送到某一個單獨線程。一般情況下由那個線程引起信號則遞送到那個線程。如果沒有線程引發信號,信號被發送到任意線程。



                 上面程序首先共享了一個共同的SIGUSR1信號處理函數,主控線程A然后產生一個線程B,線程B首先獲得全局互斥鎖,然后運行一個長5秒的程序,然后釋放鎖。在B運行了大概2秒的時候,線程A給本進程(注意是進程,而不是某線程)發送一個SIGUSR1信號。此時,會死鎖么?編譯運行看結果.

                連續運行了5次,都沒有死鎖。我們分析一下,當進程接收信號時,進程把信號并沒有遞送給線程B(因為沒有產生死鎖),也就是說是不是這個遞送過程被優化了?還是我們真的運氣好?需要進一步探查。接下來我們指定把信號遞送給線程B,看會不會死鎖。

                接下來編譯運行:

                不出意料,果然死鎖了。
                也就是說,關于線程與信號處理函數獲得同一把互斥鎖的問題,關鍵是看信號被遞送給了那個線程,如果信號是被遞送給了獲得鎖的那個線程,就會死鎖,如果不是之前獲得鎖的線程,程序就繼續運行。
            久久久久久久久久免免费精品| 久久综合鬼色88久久精品综合自在自线噜噜| 亚洲午夜无码AV毛片久久| 区久久AAA片69亚洲| 国产国产成人精品久久| 亚洲精品tv久久久久| 九九久久自然熟的香蕉图片| 色综合合久久天天综合绕视看| 久久人妻少妇嫩草AV蜜桃| 漂亮人妻被黑人久久精品| 99久久免费只有精品国产| 久久久SS麻豆欧美国产日韩| 91久久精品91久久性色| 亚洲婷婷国产精品电影人久久 | 欧美日韩精品久久久久| 久久久国产乱子伦精品作者| 久久国产香蕉视频| 欧美一区二区精品久久| 国产亚洲欧美精品久久久| 国产精品久久久久久久人人看| 99久久国产免费福利| 久久ZYZ资源站无码中文动漫| 一本综合久久国产二区| 狠狠久久综合伊人不卡| 久久久噜噜噜久久中文福利| 综合久久一区二区三区 | www久久久天天com| 久久亚洲sm情趣捆绑调教| 久久99久久无码毛片一区二区 | 欧美牲交A欧牲交aⅴ久久 | 久久精品天天中文字幕人妻| 久久亚洲国产成人精品无码区| 国产99久久精品一区二区| 国内精品久久久久久99蜜桃| 亚洲精品乱码久久久久久蜜桃不卡| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久久久亚洲AV成人网| 伊人久久大香线蕉精品| 国产成人99久久亚洲综合精品| 99久久精品国产高清一区二区| 男女久久久国产一区二区三区|