卢诗华建筑创新与城市战略 發表於 2024-2-19 00:00:00

linux线程的取消(终止)方法

<p><strong>关键:</strong></p>
<p>pthread_cancel函数<span><strong>发送终止信号</strong></span><br>
pthread_setcancelstate函数<span><strong>设置终止方式</strong></span><br>
pthread_testcancel函数<span><strong>取消线程</strong></span>(另一功能是:设置取消点)</p>
<p><span><strong>1 线程取消的定义</strong></span></p>
<p>一般情况下,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线程发来的终止(取消)请求而强制终止。</p>
<p><span><strong>2 线程取消的语义</strong></span></p>
<p>线程取消的方法是向目标线程发Cancel信号(pthread_cancel函数<span><strong>发送Cancel信号</strong></span>),但如何处理Cancel信号则由目标线程自己决定,或者忽略、或者立即终止、或者继续运行至Cancelation-point(取消点),由不同的Cancelation状态(pthread_setcancelstate函数<span><strong>设置状态</strong></span>)决定。</p>
<p>线程接收到CANCEL信号的缺省处理(即pthread_create()创建线程的缺省状态)是继续运行至取消点,也就是说设置一个CANCELED状态,线程继续运行,只有运行至Cancelation-point的时候才会退出。</p>
<p><span><strong>3 取消点</strong></span></p>
<p>根据POSIX标准,<span><strong>pthread_join()、pthread_testcancel()、pthread_cond_wait()、 pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起阻塞的系统调用都是Cancelation-point,</strong></span>而其他pthread函数都不会引起Cancelation动作。但是pthread_cancel的手册页声称,由于LinuxThread库与C库结合得不好,因而目前C库函数都不是Cancelation-point;但CANCEL信号会使线程从阻塞的系统调用中退出,并置EINTR错误码,因此可以在需要作为Cancelation-point的系统调用前后调用 pthread_testcancel(),从而达到POSIX标准所要求的目标,即如下代码段:</p>
<p>pthread_testcancel();<br>
retcode = read(fd, buffer, length);<br>
 pthread_testcancel();</p>
<p><span><strong>4 程序设计方面的考虑</strong></span></p>
<p>如果线程处于无限循环中,且循环体内没有执行至取消点的必然路径,则线程无法由外部其他线程的取消请求而终止。因此在这样的循环体的必经路径上应该加入pthread_testcancel()调用。</p>
<p><span><strong>5 与线程取消相关的pthread函数</strong></span></p>
<p>int pthread_cancel(pthread_t thread)</p>
<p><span><strong>发送终止信号给thread线程,</strong></span>如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。</p>
<p>int pthread_setcancelstate(int state, int *oldstate)</p>
<p>设置本线程对Cancel信号的反应,<span><strong>state有两种值:PTHREAD_CANCEL_ENABLE(缺省)和 PTHREAD_CANCEL_DISABLE,</strong></span>分别表示收到信号后设为CANCLED状态和忽略CANCEL信号继续运行;old_state如果不为 NULL则存入原来的Cancel状态以便恢复。</p>
<p>int pthread_setcanceltype(int type, int *oldtype)</p>
<p>设置本线程取消动作的执行时机,type由两种取值:PTHREAD_CANCEL_DEFFERED和 PTHREAD_CANCEL_ASYCHRONOUS,仅当Cancel状态为Enable时有效,分别表示收到信号后继续运行至下一个取消点再退出和立即执行取消动作(退出);oldtype如果不为NULL则存入运来的取消动作类型值。</p>
<p>void pthread_testcancel(void)</p>
<p><span><strong>功能一:设置取消点;</strong></span></p>
<p><span><strong>功能二:检查本线程是否处于Canceld状态,如果是,则进行取消动作,否则直接返回。</strong></span></p>
<p>代码:</p>
<div class="jb51code">
<div><div id="highlighter_251939" class="syntaxhighlighterxhtml">
<div class="toolbar"><span>?</span></div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
</td>
<td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">#include &lt;</code><code class="xhtml keyword">stdio.h</code><code class="xhtml plain">&gt;</code>
</div>
<div class="line number2 index1 alt1">
<code class="xhtml plain">#include &lt;</code><code class="xhtml keyword">errno.h</code><code class="xhtml plain">&gt;</code>
</div>
<div class="line number3 index2 alt2">
<code class="xhtml plain">#include &lt;</code><code class="xhtml keyword">unistd.h</code><code class="xhtml plain">&gt;</code>
</div>
<div class="line number4 index3 alt1">
<code class="xhtml plain">#include &lt;</code><code class="xhtml keyword">stdlib.h</code><code class="xhtml plain">&gt;</code>
</div>
<div class="line number5 index4 alt2">
<code class="xhtml plain">#include &lt;</code><code class="xhtml keyword">pthread.h</code><code class="xhtml plain">&gt;</code>
</div>
<div class="line number6 index5 alt1"> </div>
<div class="line number7 index6 alt2"> </div>
<div class="line number8 index7 alt1"><code class="xhtml plain">#define THREAD_MAX 4</code></div>
<div class="line number9 index8 alt2"> </div>
<div class="line number10 index9 alt1"> </div>
<div class="line number11 index10 alt2"><code class="xhtml plain">pthread_mutex_t mutex;</code></div>
<div class="line number12 index11 alt1"><code class="xhtml plain">pthread_t thread;</code></div>
<div class="line number13 index12 alt2"> </div>
<div class="line number14 index13 alt1"> </div>
<div class="line number15 index14 alt2"><code class="xhtml plain">static int tries;</code></div>
<div class="line number16 index15 alt1"><code class="xhtml plain">static int started;</code></div>
<div class="line number17 index16 alt2"> </div>
<div class="line number18 index17 alt1"> </div>
<div class="line number19 index18 alt2"><code class="xhtml plain">void print_it(int *arg)</code></div>
<div class="line number20 index19 alt1"><code class="xhtml plain">{</code></div>
<div class="line number21 index20 alt2"><code class="xhtml plain">pthread_t tid;</code></div>
<div class="line number22 index21 alt1"><code class="xhtml plain">tid = pthread_self();</code></div>
<div class="line number23 index22 alt2"><code class="xhtml plain">printf("Thread %lx was canceled on its %d try.\n",tid,*arg);</code></div>
<div class="line number24 index23 alt1"><code class="xhtml plain">}</code></div>
<div class="line number25 index24 alt2"> </div>
<div class="line number26 index25 alt1"> </div>
<div class="line number27 index26 alt2"><code class="xhtml plain">void *Search_Num(int arg)</code></div>
<div class="line number28 index27 alt1"><code class="xhtml plain">{</code></div>
<div class="line number29 index28 alt2"><code class="xhtml plain">pthread_t tid;</code></div>
<div class="line number30 index29 alt1"><code class="xhtml plain">int num;</code></div>
<div class="line number31 index30 alt2"><code class="xhtml plain">int k=0,h=0,j;</code></div>
<div class="line number32 index31 alt1"><code class="xhtml plain">int ntries;</code></div>
<div class="line number33 index32 alt2"><code class="xhtml plain">tid = pthread_self();</code></div>
<div class="line number34 index33 alt1"> </div>
<div class="line number35 index34 alt2"><code class="xhtml plain">/*while(pthread_mutex_trylock(&amp;mutex) == EBUSY)</code></div>
<div class="line number36 index35 alt1"><code class="xhtml plain">{</code></div>
<div class="line number37 index36 alt2"><code class="xhtml plain">printf("**************busy****************\n");</code></div>
<div class="line number38 index37 alt1"><code class="xhtml plain">pthread_testcancel();</code></div>
<div class="line number39 index38 alt2"><code class="xhtml plain">}*/</code></div>
<div class="line number40 index39 alt1"><code class="xhtml plain">srand(arg);</code></div>
<div class="line number41 index40 alt2"><code class="xhtml plain">num = rand()&amp;0xFFFFFF;</code></div>
<div class="line number42 index41 alt1"><code class="xhtml plain">//pthread_mutex_unlock(&amp;mutex);</code></div>
<div class="line number43 index42 alt2"> </div>
<div class="line number44 index43 alt1"><code class="xhtml plain">printf("thread num %lx\n",tid);</code></div>
<div class="line number45 index44 alt2"> </div>
<div class="line number46 index45 alt1"><code class="xhtml plain">ntries = 0;</code></div>
<div class="line number47 index46 alt2"><code class="xhtml plain">pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);</code></div>
<div class="line number48 index47 alt1"><code class="xhtml plain">pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);</code></div>
<div class="line number49 index48 alt2"> </div>
<div class="line number50 index49 alt1"><code class="xhtml plain">pthread_cleanup_push((void *)print_it,(void *)&amp;ntries);</code></div>
<div class="line number51 index50 alt2"> </div>
<div class="line number52 index51 alt1"><code class="xhtml plain">while(1)</code></div>
<div class="line number53 index52 alt2"><code class="xhtml plain">{</code></div>
<div class="line number54 index53 alt1"><code class="xhtml plain">num = (num+1)&amp;0xffffff;</code></div>
<div class="line number55 index54 alt2"><code class="xhtml plain">ntries++;</code></div>
<div class="line number56 index55 alt1"> </div>
<div class="line number57 index56 alt2"><code class="xhtml plain">if(arg == num)</code></div>
<div class="line number58 index57 alt1"><code class="xhtml plain">{</code></div>
<div class="line number59 index58 alt2"><code class="xhtml plain">//只允许一个线程操作此处</code></div>
<div class="line number60 index59 alt1"><code class="xhtml plain">while(pthread_mutex_trylock(&amp;mutex) == EBUSY) { </code></div>
<div class="line number61 index60 alt2"><code class="xhtml plain">//一个线程操作后其余线程进入次循环挂起,等待pthread_cancel函数发送cancel信号终止线程</code></div>
<div class="line number62 index61 alt1"><code class="xhtml plain">k++;</code></div>
<div class="line number63 index62 alt2"><code class="xhtml plain">if(k == 10000)</code></div>
<div class="line number64 index63 alt1"><code class="xhtml plain">{</code></div>
<div class="line number65 index64 alt2"><code class="xhtml plain">printf("----------2busy2-----------\n");</code></div>
<div class="line number66 index65 alt1"><code class="xhtml plain">}</code></div>
<div class="line number67 index66 alt2"> </div>
<div class="line number68 index67 alt1"><code class="xhtml plain">pthread_testcancel();</code></div>
<div class="line number69 index68 alt2"><code class="xhtml plain">}</code></div>
<div class="line number70 index69 alt1"><code class="xhtml plain">tries = ntries;</code></div>
<div class="line number71 index70 alt2"><code class="xhtml plain">//pthread_mutex_unlock(&amp;mutex);  //如果加上这句话,将会有好几个线程找到主函数中设定的值pid</code></div>
<div class="line number72 index71 alt1"><code class="xhtml plain">printf("Thread %lx found the number!\n",tid);</code></div>
<div class="line number73 index72 alt2"> </div>
<div class="line number74 index73 alt1"><code class="xhtml plain">for(j = 0;j&lt;THREAD_MAX;j++)</code></div>
<div class="line number75 index74 alt2"><code class="xhtml plain">{</code></div>
<div class="line number76 index75 alt1"><code class="xhtml plain">if(thread!=tid)</code></div>
<div class="line number77 index76 alt2"><code class="xhtml plain">{</code></div>
<div class="line number78 index77 alt1"><code class="xhtml plain">pthread_cancel(thread);</code></div>
<div class="line number79 index78 alt2"><code class="xhtml plain">}</code></div>
<div class="line number80 index79 alt1"><code class="xhtml plain">}</code></div>
<div class="line number81 index80 alt2"> </div>
<div class="line number82 index81 alt1"><code class="xhtml plain">break;</code></div>
<div class="line number83 index82 alt2"><code class="xhtml plain">}</code></div>
<div class="line number84 index83 alt1"><code class="xhtml plain">if(ntries%100 == 0)</code></div>
<div class="line number85 index84 alt2"><code class="xhtml plain">{</code></div>
<div class="line number86 index85 alt1"><code class="xhtml plain">h++;</code></div>
<div class="line number87 index86 alt2"><code class="xhtml plain">/*线程阻塞,其他线程争夺资源,或者是等待pthread_cancel函数发送cancel信号终止线程*/</code></div>
<div class="line number88 index87 alt1"><code class="xhtml plain">pthread_testcancel();</code></div>
<div class="line number89 index88 alt2"><code class="xhtml plain">/*这是为了弄明白pthread_testcancel函数的作用而设置的代码段*/</code></div>
<div class="line number90 index89 alt1"><code class="xhtml plain">if(h == 10000)</code></div>
<div class="line number91 index90 alt2"><code class="xhtml plain">{</code></div>
<div class="line number92 index91 alt1"><code class="xhtml plain">h = 0;</code></div>
<div class="line number93 index92 alt2"><code class="xhtml plain">printf("----------thread num %lx-------------\n",tid);</code></div>
<div class="line number94 index93 alt1"><code class="xhtml plain">}</code></div>
<div class="line number95 index94 alt2"><code class="xhtml plain">}</code></div>
<div class="line number96 index95 alt1"><code class="xhtml plain">}</code></div>
<div class="line number97 index96 alt2"><code class="xhtml plain">pthread_cleanup_pop(0);</code></div>
<div class="line number98 index97 alt1"><code class="xhtml plain">return (void *)0;</code></div>
<div class="line number99 index98 alt2"><code class="xhtml plain">}</code></div>
<div class="line number100 index99 alt1"> </div>
<div class="line number101 index100 alt2"> </div>
<div class="line number102 index101 alt1"><code class="xhtml plain">int main()</code></div>
<div class="line number103 index102 alt2"><code class="xhtml plain">{</code></div>
<div class="line number104 index103 alt1"><code class="xhtml plain">int i,pid;</code></div>
<div class="line number105 index104 alt2"> </div>
<div class="line number106 index105 alt1"><code class="xhtml plain">pid = getpid(); //设置要查找的数</code></div>
<div class="line number107 index106 alt2"> </div>
<div class="line number108 index107 alt1"><code class="xhtml plain">pthread_mutex_init(&amp;mutex,NULL);</code></div>
<div class="line number109 index108 alt2"><code class="xhtml plain">printf("Search the num of %d\n",pid);</code></div>
<div class="line number110 index109 alt1"><code class="xhtml plain">for(started = 0; started &lt; THREAD_MAX; started++)</code></div>
<div class="line number111 index110 alt2"><code class="xhtml plain">{</code></div>
<div class="line number112 index111 alt1"><code class="xhtml plain">pthread_create(&amp;thread,NULL,(void *)Search_Num,(void *)pid);</code></div>
<div class="line number113 index112 alt2"><code class="xhtml plain">}</code></div>
<div class="line number114 index113 alt1"> </div>
<div class="line number115 index114 alt2"><code class="xhtml plain">for(i = 0; i &lt; THREAD_MAX; i++)</code></div>
<div class="line number116 index115 alt1"><code class="xhtml plain">{</code></div>
<div class="line number117 index116 alt2"><code class="xhtml plain">printf("-----------i = %d--------------\n",i);</code></div>
<div class="line number118 index117 alt1"><code class="xhtml plain">pthread_join(thread,NULL);</code></div>
<div class="line number119 index118 alt2"><code class="xhtml plain">}</code></div>
<div class="line number120 index119 alt1"><code class="xhtml plain">printf("It took %d tries ot find the number!\n",tries);</code></div>
<div class="line number121 index120 alt2"><code class="xhtml plain">return 0;</code></div>
<div class="line number122 index121 alt1"><code class="xhtml plain">}</code></div>
</div></td>
</tr></tbody></table>
</div></div>
<div class="codetool" id="codetool"><div class="code_n"><textarea></textarea></div></div>
</div>
<p>运行结果:</p>
<div class="jb51code">
<div><div id="highlighter_366816" class="syntaxhighlighterxhtml">
<div class="toolbar"><span>?</span></div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
</td>
<td class="code"><div class="container">
<div class="line number1 index0 alt2"><code class="xhtml plain">Search the num of 6531</code></div>
<div class="line number2 index1 alt1"><code class="xhtml plain">-----------i = 0--------------</code></div>
<div class="line number3 index2 alt2"><code class="xhtml plain">thread num b6fbcb70</code></div>
<div class="line number4 index3 alt1"><code class="xhtml plain">thread num b67bbb70</code></div>
<div class="line number5 index4 alt2"><code class="xhtml plain">thread num b5fbab70</code></div>
<div class="line number6 index5 alt1"><code class="xhtml plain">thread num b77bdb70</code></div>
<div class="line number7 index6 alt2"><code class="xhtml plain">----------thread num b67bbb70-------------</code></div>
<div class="line number8 index7 alt1"><code class="xhtml plain">Thread b67bbb70 found the number!</code></div>
<div class="line number9 index8 alt2"><code class="xhtml plain">----------thread num b6fbcb70-------------</code></div>
<div class="line number10 index9 alt1"><code class="xhtml plain">----------thread num b77bdb70-------------</code></div>
<div class="line number11 index10 alt2"><code class="xhtml plain">----------2busy2-----------</code></div>
<div class="line number12 index11 alt1"><code class="xhtml plain">----------thread num b5fbab70-------------</code></div>
<div class="line number13 index12 alt2"><code class="xhtml plain">----------2busy2-----------</code></div>
<div class="line number14 index13 alt1"><code class="xhtml plain">Thread b5fbab70 was canceled on its 1174527 try.</code></div>
<div class="line number15 index14 alt2"><code class="xhtml plain">Thread b77bdb70 was canceled on its 1023100 try.</code></div>
<div class="line number16 index15 alt1"><code class="xhtml plain">-----------i = 1--------------</code></div>
<div class="line number17 index16 alt2"><code class="xhtml plain">Thread b6fbcb70 was canceled on its 1174527 try.</code></div>
<div class="line number18 index17 alt1"><code class="xhtml plain">-----------i = 2--------------</code></div>
<div class="line number19 index18 alt2"><code class="xhtml plain">-----------i = 3--------------</code></div>
<div class="line number20 index19 alt1"><code class="xhtml plain">It took 1174527 tries ot find the number!</code></div>
</div></td>
</tr></tbody></table>
</div></div>
<div class="codetool" id="codetool"><div class="code_n"><textarea></textarea></div></div>
</div>
<p>从这结果里你有没有看出什么呢?呵呵~.~</p>
<p>以上就是小编为大家带来的linux线程的取消(终止)方法全部内容了,希望大家多多支持~</p>
頁: [1]
查看完整版本: linux线程的取消(终止)方法