登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[pthread] 线程的创建与退出  

2009-12-25 21:08:05|  分类: pthread |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有时候需要写 pthread 程序,一会半会找不到几个简单的 sample 来参考。还是自己专门记录几篇文字,备查吧。:-)

简单创建一个线程,并等待其退出。
------------------------------------------
#include <pthread.h>
#include <stdio.h>

void *mythr(void *arg)
{
        printf("hello world! %d\n", (int)arg);

        // 这里写 pthread_exit((void *) 4); 和下面的效果一样
        return (void *)4;
}

int main()
{
        pthread_t pid;
        void *ret;

        pthread_create(&pid, NULL, mythr, (void *)3);   // 第二个参数是 attr
        pthread_join(pid, &ret);   // 等待线程结束,第二个参数是 return_value
        printf("done! = %d\n", (int)ret);
        return 0;
}
------------------------------------
$ ./a.out
hello world! 3
done! = 4
------------------------------------


如果我们希望线程退出时,自动清理一些资源,可以用 pthread_cleanup_push() 来增加
“退出时调用的 cleanup 函数"。而 pthread_cleanup_pop() 可以 cleanup_func_stack 顶的
函数 pop 出来。
------------------------------------
#include <pthread.h>
#include <stdio.h>

void mycleanup(void *arg)
{
        printf("cleaner = %d\n", (int)arg);
}

void *mythr(void *arg)
{
        pthread_cleanup_push(mycleanup, (void *)1);
        pthread_cleanup_push(mycleanup, (void *)2);

        pthread_cleanup_pop(1);         // 1 - exec cleanup func, 0 - no exec

        printf("hello world! %d\n", (int)arg);
        return (void *)4;
}

int main()
{
        pthread_t pid;
        void *ret;

        pthread_create(&pid, NULL, mythr, (void *)3);
        pthread_join(pid, &ret);
        printf("done! = %d\n", (int)ret);
        return 0;
}
------------------------------------
$ ./a.out
cleaner = 2
hello world! 3
cleaner = 1
done! = 4
------------------------------------

注意:
  <1> 不能对一个 pid 多次 pthread_join
  <2> 不能在 cleanup func 中调用 pthread_exit
  评论这张
 
阅读(2526)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018