Linux中的可重入函数和不可重入函数

<div id="article_details" class="details">
    <div class="article_title">   
         <span class="ico ico_type_Original"></span>




    <h1>
        <span class="link_title"><a href="/dlutbrucezhang/article/details/8817587">
        Linux中的可重入函数和不可重入函数            
        </a></span>
    </h1>
</div>


   


        <div class="article_manage clearfix">
        <div class="article_l">
            <span class="link_categories">
            标签:
              <a href="http://www.csdn.net/tag/Linux" target="_blank" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">Linux</a><a href="http://www.csdn.net/tag/%e5%a4%9a%e7%ba%bf%e7%a8%8b" target="_blank" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">多线程</a><a href="http://www.csdn.net/tag/%e5%a4%84%e7%90%86%e5%99%a8" target="_blank" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">处理器</a><a href="http://www.csdn.net/tag/%e8%a1%8c%e4%b8%9a%e6%95%b0%e6%8d%ae" target="_blank" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">行业数据</a><a href="http://www.csdn.net/tag/%e5%85%a8%e5%b1%80%e5%8f%98%e9%87%8f" target="_blank" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">全局变量</a>
            </span>
        </div>
        <div class="article_r">
            <span class="link_postdate">2013-04-18 10:25</span>
            <span class="link_view" title="阅读次数">3484人阅读</span>
            <span class="link_comments" title="评论次数"> <a href="#comments" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span>
            <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" οnclick="javascript:collectArticle('Linux中的可重入函数和不可重入函数','8817587');return false;" title="收藏">收藏</a></span>
             <span class="link_report"> <a href="#report" οnclick="javascript:report(8817587,2);return false;" title="举报">举报</a></span>


        </div>
    </div>
    <div class="embody" style="display:none" id="embody">
        <span class="embody_t">本文章已收录于:</span>
        <div class="embody_c" id="lib" value="{&quot;err&quot;:0,&quot;msg&quot;:&quot;ok&quot;,&quot;data&quot;:[]}"></div>
    </div>
    <style type="text/css">        
            .embody{
                padding:10px 10px 10px;
                margin:0 -20px;
                border-bottom:solid 1px #ededed;                
            }
            .embody_b{
                margin:0 ;
                padding:10px 0;
            }
            .embody .embody_t,.embody .embody_c{
                display: inline-block;
                margin-right:10px;
            }
            .embody_t{
                font-size: 12px;
                color:#999;
            }
            .embody_c{
                font-size: 12px;
            }
            .embody_c img,.embody_c em{
                display: inline-block;
                vertical-align: middle;               
            }
             .embody_c img{               
                width:30px;
                height:30px;
            }
            .embody_c em{
                margin: 0 20px 0 10px;
                color:#333;
                font-style: normal;
            }
    </style>
    <script type="text/javascript">
        $(function () {
            try
            {
                var lib = eval("("+$("#lib").attr("value")+")");
                var html = "";
                if (lib.err == 0) {
                    $.each(lib.data, function (i) {
                        var obj = lib.data[i];
                        //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                        html += ' <a href="' + obj.url + '" target="_blank">';
                        html += ' <img src="' + obj.logo + '">';
                        html += ' <em><b>' + obj.name + '</b></em>';
                        html += ' </a>';
                    });
                    if (html != "") {
                        setTimeout(function () {
                            $("#lib").html(html);                      
                            $("#embody").show();
                        }, 100);
                    }
                }      
            } catch (err)
            { }
            
        });
    </script>
      <div class="category clearfix">
        <div class="category_l">
           <img src="http://static.blog.csdn.net/images/category_icon.jpg">
            <span>分类:</span>
        </div>
        <div class="category_r">
                    <label οnclick="GetCategoryArticles('1389271','DLUTBruceZhang','top','8817587');">
                        <span οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">《UNIX环境高级编程》<em>(55)</em></span>
                      <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display: inline;">
                      <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display: none;">
                        <div class="subItem" style="display: none;">
                            <div class="subItem_t"><a href="http://blog.csdn.net/DLUTBruceZhang/article/category/1389271" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                            <ul class="subItem_l" id="top_1389271"><li class="tracking-ad" data-mod="popu_140"><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/12015141" id="top_aritcle_12015141undefined25703758328020454" target="_blank" title="linux 同步与异步--阻塞与非阻塞型I/O">linux 同步与异步--阻塞与非阻塞型I/O</a></li> <li class="tracking-ad" data-mod="popu_140"><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8914772" id="top_aritcle_8914772undefined9105543782133392" target="_blank" title="使用system函数时应该忽略两个信号">使用system函数时应该忽略两个信号</a></li> <li class="tracking-ad" data-mod="popu_140"><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8914250" id="top_aritcle_8914250undefined7434481529730461" target="_blank" title="信号实现父子进程之间的同步--sigsuspend的作用">信号实现父子进程之间的同步--sigsuspend的作用</a></li> <li class="tracking-ad" data-mod="popu_140"><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8883471" id="top_aritcle_8883471undefined8961601778028432" target="_blank" title="进程控制">进程控制</a></li> <li class="tracking-ad" data-mod="popu_140"><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8883339" id="top_aritcle_8883339undefined040913594976103695" target="_blank" title="调用 fork() 两次以避免僵死进程">调用 fork() 两次以避免僵死进程</a></li> <li style="padding-left: 300px;"><a href="http://blog.csdn.net/DLUTBruceZhang/article/category/1389271" target="_blank">更多</a></li></ul>
                        </div>
                    </label>                    
        </div>
    </div>
    <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.js"></script>  
        <div class="bog_copyright">         
            <p class="copyright_p">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
        </div>


  


  
  
     


<div id="article_content" class="article_content">


<p><strong><span style="font-size:24px; background-color:rgb(255,255,0)">可重入函数</span></strong></p>
<p></p>
<div style="margin:0px; padding:0px; font-family:Verdana,Arial,Helvetica,sans-serif; line-height:19px; background-color:rgb(254,254,242)">
<span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏。可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失。</strong></span></span></div>
<div style="margin:0px; padding:0px; font-family:Verdana,Arial,Helvetica,sans-serif; line-height:19px; background-color:rgb(254,254,242)">
<span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>可重入函数使用的变量有两种情况:</strong></span></span></div>
<div style="margin:0px; padding:0px; font-family:Verdana,Arial,Helvetica,sans-serif; line-height:19px; background-color:rgb(254,254,242)">
<span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>1.使用局部变量,变量保存在CPU寄存器中或者堆栈中;</strong></span></span></div>
<div style="margin:0px; padding:0px; font-family:Verdana,Arial,Helvetica,sans-serif; line-height:19px; background-color:rgb(254,254,242)">
<span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>2.使用全局变量,但是这时候要注意保护全局变量(防止任务中断后被其它任务改变变量)。</strong></span></span></div>
<div style="margin:0px; padding:0px; font-family:Verdana,Arial,Helvetica,sans-serif; line-height:19px; background-color:rgb(254,254,242)">
<div class="cnblogs_Highlighter" style="margin:0px; padding:0px">
<div style="margin:0px; padding:0px">
<div id="highlighter_642385" class="syntaxhighlighter  cpp" style="padding:0px; width:1066.78125px; margin:1em 0px!important; position:relative!important; overflow:auto!important; background-color:rgb(255,255,255)!important">
<div class="toolbar" style="margin:0px!important; padding:0px!important; border:none!important; bottom:auto!important; float:none!important; height:11px!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:absolute!important; right:1px!important; top:1px!important; vertical-align:baseline!important; width:11px!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; z-index:10!important; color:rgb(255,255,255)!important">
<span style="margin:0px; padding:0px; line-height:1.5"><a href="http://www.cnblogs.com/sinaxyz/archive/2012/09/10/2679440.html#" class="toolbar_item command_help help" style="color:rgb(7,93,179); margin:0px!important; padding:1px 0px 0px!important; text-decoration:none!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:center!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important; display:block!important"><span style="font-size:18px"><strong>?</strong></span></a></span></div>
<table border="0" cellpadding="0" cellspacing="0" style="border:1px solid rgb(192,192,192); width:1066px; border-collapse:collapse; margin:0px!important; padding:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">
<tbody style="margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<tr style="margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<td class="gutter" style="padding:3px; border:1px solid rgb(192,192,192); border-collapse:collapse; margin:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(175,175,175)!important; word-break:normal!important">
<div class="line number1 index0 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>1</strong></span></div>
<div class="line number2 index1 alt1" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>2</strong></span></div>
<div class="line number3 index2 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>3</strong></span></div>
<div class="line number4 index3 alt1" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>4</strong></span></div>
<div class="line number5 index4 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>5</strong></span></div>
</td>
<td class="code" style="padding:3px; border:1px solid rgb(192,192,192); width:1038px; border-collapse:collapse; margin:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; word-break:normal!important">
<div class="container" style="margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:relative!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<div class="line number1 index0 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp keyword bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(0,0,255)!important">void</code>&nbsp;<code class="cpp functions bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(255,20,147)!important">strcpy</code><code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">(*dest,*src)</code></strong></span></div>
<div class="line number2 index1 alt1" style="margin:0px!important; padding:0px 1em!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important"><span style="font-size:18px"><strong>{</strong></span></code></div>
<div class="line number3 index2 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp spaces" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(0,0,255)!important">while</code><code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">(*
 dest++ = *src ++){;}</code></strong></span></div>
<div class="line number4 index3 alt1" style="margin:0px!important; padding:0px 1em!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp spaces" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">*dest
 = NUL;</code></strong></span></div>
<div class="line number5 index4 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important"><span style="font-size:18px"><strong>}</strong></span></code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div style="margin:0px; padding:0px">
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>分析:上面的函数用于字符串复制,而参数是存放在堆栈中的,故而改函数可以被多任务调用,而不必担心各个任务调用期间会互相破坏对方的指针。</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>&nbsp;</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>基本上下面的函数都是不可重入的:</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>&nbsp;&nbsp;&nbsp;&nbsp;1.函数内使用了静态的数据。</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>&nbsp;&nbsp;&nbsp;&nbsp;2.函数内使用了malloc()或者free()函数的。</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>&nbsp;&nbsp;&nbsp;&nbsp;3.函数内调用了标准的I/O函数的。</strong></span></span></div>
<div style="margin:0px; padding:0px">
<div class="cnblogs_Highlighter" style="margin:0px; padding:0px">
<div style="margin:0px; padding:0px">
<div id="highlighter_763190" class="syntaxhighlighter  cpp" style="padding:0px; width:1066.78125px; margin:1em 0px!important; position:relative!important; overflow:auto!important; background-color:rgb(255,255,255)!important">
<div class="toolbar" style="margin:0px!important; padding:0px!important; border:none!important; bottom:auto!important; float:none!important; height:11px!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:absolute!important; right:1px!important; top:1px!important; vertical-align:baseline!important; width:11px!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; z-index:10!important; color:rgb(255,255,255)!important">
<span style="margin:0px; padding:0px; line-height:1.5"><a href="http://www.cnblogs.com/sinaxyz/archive/2012/09/10/2679440.html#" class="toolbar_item command_help help" style="color:rgb(7,93,179); margin:0px!important; padding:1px 0px 0px!important; text-decoration:none!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:center!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important; display:block!important"><span style="font-size:18px"><strong>?</strong></span></a></span></div>
<table border="0" cellpadding="0" cellspacing="0" style="border:1px solid rgb(192,192,192); width:1066px; border-collapse:collapse; margin:0px!important; padding:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">
<tbody style="margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<tr style="margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<td class="gutter" style="padding:3px; border:1px solid rgb(192,192,192); border-collapse:collapse; margin:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(175,175,175)!important; word-break:normal!important">
<div class="line number1 index0 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>1</strong></span></div>
<div class="line number2 index1 alt1" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>2</strong></span></div>
<div class="line number3 index2 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>3</strong></span></div>
<div class="line number4 index3 alt1" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>4</strong></span></div>
<div class="line number5 index4 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>5</strong></span></div>
<div class="line number6 index5 alt1" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>6</strong></span></div>
<div class="line number7 index6 alt2" style="margin:0px!important; padding:0px 0.5em 0px 1em!important; background-color:rgb(248,248,248)!important; border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong>7</strong></span></div>
</td>
<td class="code" style="padding:3px; border:1px solid rgb(192,192,192); width:1038px; border-collapse:collapse; margin:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; word-break:normal!important">
<div class="container" style="margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:relative!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<div class="line number1 index0 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp color1 bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:gray!important">int</code>&nbsp;<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">temp;</code></strong></span></div>
<div class="line number2 index1 alt1" style="margin:0px!important; padding:0px 1em!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp spaces" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">&nbsp;</code><code class="cpp keyword bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(0,0,255)!important">void</code>&nbsp;<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">swap(</code><code class="cpp color1 bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:gray!important">int</code>&nbsp;<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">*ex1,</code><code class="cpp color1 bold" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:gray!important">int</code>&nbsp;<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">*ex2)</code></strong></span></div>
<div class="line number3 index2 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important"><span style="font-size:18px"><strong>{</strong></span></code></div>
<div class="line number4 index3 alt1" style="margin:0px!important; padding:0px 1em!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp spaces" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">temp
 = *ex1; </code><code class="cpp comments" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important; color:rgb(0,130,0)!important">//(1)</code></strong></span></div>
<div class="line number5 index4 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp spaces" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">*ex1
 = *ex2;</code></strong></span></div>
<div class="line number6 index5 alt1" style="margin:0px!important; padding:0px 1em!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<span style="font-size:18px"><strong><code class="cpp spaces" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important">*ex2
 = temp;</code></strong></span></div>
<div class="line number7 index6 alt2" style="margin:0px!important; padding:0px 1em!important; background-color:rgb(248,248,248)!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:auto!important">
<code class="cpp plain" style="white-space:pre-wrap; margin:0px!important; padding:0px!important; border:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:2em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:'Courier New',Consolas,'Bitstream Vera Sans Mono',Courier,monospace!important; min-height:auto!important"><span style="font-size:18px"><strong>}</strong></span></code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>分析:该函数中的全局变量temp是的函数变成了一个不可重入的函数,因为在多任务系统中,假如在任务1中调用swap函数,而程序执行到(1)处时被中断,进而执行其它的任务2,而刚好任务2也调用了swap函数,则temp里存的值则会被任务2改变。从而回到任务1被中断处继续执行的时候,temp里存的值已经不再是原来存的temp值了,进而产生了错误。</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="font-size:18px"><strong>&nbsp;</strong></span></div>
<div style="margin:0px; padding:0px"><span style="font-size:18px"><strong>常用的可重入函数的方法有:</strong></span></div>
<div style="margin:0px; padding:0px"><span style="font-size:18px"><strong>1.不要使用全局变量,防止别的代码覆盖这些变量的值。</strong></span></div>
<div style="margin:0px; padding:0px">
<div style="margin:0px; padding:0px">
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>2.调用这类函数之前先关掉中断,调用完之后马上打开中断。防止函数执行期间被中断进入别的任务执行。</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="font-size:18px"><strong>3.使用信号量(互斥条件)。</strong></span></span></div>
<div style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; line-height:1.5"><span style="margin:0px; padding:0px"><span style="font-size:18px"><strong>总之:要保证中断是安全的</strong></span></span></span></div>
</div>
</div>
</div>
</div>
</div>
<br>
<p></p>
<p><strong><span style="font-size:24px; background-color:rgb(255,255,0)">不可重入函数</span></strong></p>
<p></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>在多任务系统下,中断可能在任务执行的任何时间发生;如果一个函数的执行期间被中断后,到重新恢复到断点进行执行的过程中,函数所依赖的环境没有发生改变,那么这个函数就是可重入的,否则就<span style="word-wrap:break-word; background-color:rgb(160,255,255)">不可重入</span>。</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>在中断前后不都要保存和恢复上下文吗,怎么会出现函数所依赖的环境发生改变了呢?</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>我们知道中断时确实保存一些上下文,但是仅限于返回地址,cpu寄存器等之类的少量上下文,而函数内部使用的诸如全局或静态变量,buffer等并不在保护之列,所以如果这些值在函数被中断期间发生了改变,那么当函数回到断点继续执行时,其结果就不可预料了。</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>满足下面条件之一的多数是<span style="word-wrap:break-word; background-color:rgb(160,255,255)">不可重入</span>函数:</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>(1)使用了静态<a href="http://lib.csdn.net/base/31" class="replace_word" title="算法与数据结构知识库" target="_blank" style="color:#df3434; font-weight:bold;">数据结构</a>;</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>(2)调用了malloc或free;</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>(3)调用了标准I/O函数;</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>(4)进行了</strong></span><strong style="font-size:18px; text-indent:2em"><span style="word-wrap:break-word; background-color:rgb(255,255,102)">浮点</span>运算.</strong></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>&nbsp;</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>malloc/free是<span style="word-wrap:break-word; background-color:rgb(160,255,255)">不可重入</span>的,它们使用了全局变量来指向空闲区;标准I/O库的很多实现都使用了全局数据结构; 许多的处理器/编译器中,<span style="word-wrap:break-word; background-color:rgb(255,255,102)">浮点</span>一般都是<span style="word-wrap:break-word; background-color:rgb(160,255,255)">不可重入</span>的
 (<span style="word-wrap:break-word; background-color:rgb(255,255,102)">浮点</span>运算大多使用协处理器或者软件模拟来实现)。</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>&nbsp;</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>在信号处理程序及多线程编程时,要特别注意。</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>考虑这种情况:</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>1) 信号处理程序A内外都调用了同一个<span style="word-wrap:break-word; background-color:rgb(160,255,255)">不可重入</span>函数B;B在执行期间被信号打断,进入A (A中调用了B),完事之后返回B被中断点继续执行,这时B函数的环境可能改变,其结果就不可预料了。</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>2) 多线程共享进程内部的资源,如果两个线程A,B调用同一个<span style="word-wrap:break-word; background-color:rgb(160,255,255)">不可重入</span>函数F,A线程进入F后,线程调度,切换到B,B也执行了F,那么当再次切换到线程A时,其调用F的结果也是不可预料的。</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>在信号处理程序中即使调用可重入函数也有问题要注意。作为一个通用的规则,当在信号处理程序中调用可重</strong></span></p>
<p style="word-wrap:break-word; margin-top:5px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; font-family:宋体,Arial; line-height:26px; text-indent:2em">
<span style="font-size:18px"><strong>入函数时,应当在其前保存errno,并在其后恢复errno。(要了解经常被捕捉到的信号是SIGCHLD,其信号处理程序通常要调用一种wait函数,而各种wait函数都能改变errno。)</strong></span></p>
<br>
   
</div>








<!-- Baidu Button BEGIN -->








<div class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" style="float: right;" data-mod="popu_172" data-bd-bind="1476321039367">
<a href="#" class="bds_more" data-cmd="more" style="background-position:0 0 !important; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png) !important"></a>
<a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间" style="background-position:0 -52px !important"></a>
<a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博" style="background-position:0 -104px !important"></a>
<a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博" style="background-position:0 -260px !important"></a>
<a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网" style="background-position:0 -208px !important"></a>
<a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信" style="background-position:0 -1612px !important"></a>
</div>
<script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script>
<!-- Baidu Button END -->


   <link rel="stylesheet" href="http://static.blog.csdn.net/css/blog_detail.css">


    
<!--172.16.140.11-->


<!-- Baidu Button BEGIN -->
<script type="text/javascript" id="bdshare_js" data="type=tools&amp;uid=1536434" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=410090"></script>


<script type="text/javascript">
    document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)
</script>
<!-- Baidu Button END -->


 


        <div id="digg" articleid="8817587">
            <dl id="btnDigg" class="digg digg_enable" οnclick="btndigga();">
               
                 <dt>顶</dt>
                <dd>1</dd>
            </dl>
           
              
            <dl id="btnBury" class="digg digg_enable" οnclick="btnburya();">
              
                  <dt>踩</dt>
                <dd>0</dd>               
            </dl>
            
        </div>
     <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);">&nbsp;</a>   </div>
    <div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);">&nbsp;</a></div>
    <script type="text/javascript">
                function btndigga() {
                    $(".tracking-ad[data-mod='popu_222'] a").click();
                }
                function btnburya() {
                    $(".tracking-ad[data-mod='popu_223'] a").click();
                }
            </script>


   <ul class="article_next_prev">
                <li class="prev_article"><span οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian']);location.href='/dlutbrucezhang/article/details/8815506';">上一篇</span><a href="/dlutbrucezhang/article/details/8815506" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian'])">linux系统调用和库函数调用的区别</a></li>
                <li class="next_article"><span οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian']);location.href='/dlutbrucezhang/article/details/8819698';">下一篇</span><a href="/dlutbrucezhang/article/details/8819698" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian'])">linux c 之sigsuspend 进程阻塞</a></li>
    </ul>


    <div style="clear:both; height:10px;"></div>




        <div class="similar_article" style="">
                <h4>我的同类文章</h4>
                <div class="similar_c" style="margin:20px 0px 0px 0px">
                    <div class="similar_c_t">
                                <label class="similar_cur">
                                    <span style="cursor:pointer" οnclick="GetCategoryArticles('1389271','DLUTBruceZhang','foot','8817587');">《UNIX环境高级编程》<em>(55)</em></span>
                                </label>
                    </div>
                   
                    <div class="similar_wrap tracking-ad" data-mod="popu_141" style="max-height:195px;">
                        <a href="http://blog.csdn.net" style="display:none">http://blog.csdn.net</a>
                        <ul class="similar_list fl"><li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/12015141" id="foot_aritcle_12015141undefined6308514044622291" target="_blank" title="linux 同步与异步--阻塞与非阻塞型I/O">linux 同步与异步--阻塞与非阻塞型I/O</a><span>2013-09-25</span><label><i>阅读</i><b>1445</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8914250" id="foot_aritcle_8914250undefined10723850652524058" target="_blank" title="信号实现父子进程之间的同步--sigsuspend的作用">信号实现父子进程之间的同步--sigsuspend的作用</a><span>2013-05-11</span><label><i>阅读</i><b>3673</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8883339" id="foot_aritcle_8883339undefined46357555790109894" target="_blank" title="调用 fork() 两次以避免僵死进程">调用 fork() 两次以避免僵死进程</a><span>2013-05-04</span><label><i>阅读</i><b>4371</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8878630" id="foot_aritcle_8878630undefined8902568039123433" target="_blank" title="Linux下互斥量与条件变量详细解析">Linux下互斥量与条件变量详细解析</a><span>2013-05-03</span><label><i>阅读</i><b>3841</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8877055" id="foot_aritcle_8877055undefined15226653829029035" target="_blank" title="用C语言得到Linux主机的IP地址">用C语言得到Linux主机的IP地址</a><span>2013-05-02</span><label><i>阅读</i><b>1526</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8872581" id="foot_aritcle_8872581undefined9455712280638049" target="_blank" title="Linux下基于socket多线程并发通信的实现">Linux下基于socket多线程并发通信的实现</a><span>2013-05-01</span><label><i>阅读</i><b>2343</b></label></li> </ul>


                        <ul class="similar_list fr"><li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8914772" id="foot_aritcle_8914772undefined9400255583397015" target="_blank" title="使用system函数时应该忽略两个信号">使用system函数时应该忽略两个信号</a><span>2013-05-11</span><label><i>阅读</i><b>2851</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8883471" id="foot_aritcle_8883471undefined2138544279049921" target="_blank" title="进程控制">进程控制</a><span>2013-05-04</span><label><i>阅读</i><b>1276</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8880131" id="foot_aritcle_8880131undefined691412858793572" target="_blank" title="Linux C 实现文件传输">Linux C 实现文件传输</a><span>2013-05-03</span><label><i>阅读</i><b>1991</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8877236" id="foot_aritcle_8877236undefined2179933753706631" target="_blank" title="Linux C 实现生产者消费者问题">Linux C 实现生产者消费者问题</a><span>2013-05-02</span><label><i>阅读</i><b>3172</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/8875027" id="foot_aritcle_8875027undefined14394689739590127" target="_blank" title="Linux多线程编程">Linux多线程编程</a><span>2013-05-02</span><label><i>阅读</i><b>1713</b></label></li> </ul>
                    <a href="http://blog.csdn.net/DLUTBruceZhang/article/category/1389271" class="MoreArticle">更多文章</a></div>
                </div>
            </div>    
    <script type="text/javascript">
        $(function () {
            GetCategoryArticles('1389271', 'DLUTBruceZhang','foot','8817587');
        });
    </script>
      
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值