点击(此处)折叠或打开
/*AUTHOR: WJ *DATE: 2015-3-18 * * *getpid() 获取进程ID *pthread_self() 获取县城ID * *int pthread_create(pthread_t *thread, * const pthread_attr_t *attr, * void *(*start_routine) (void *), * void *arg); *第一个参数,新线程id,创建成功系统回填 *第二个参数,新线程到属性,NULL为默认属性 *第三个参数,新线程到启动函数 *第四个参数,传递给新线程 * *主线程的接收的参数都放在argv[], 而参数的个数则由argc统计 */ #include "apue.h" struct student { int age; char name[20]; char id[4]; }; void *thread_fun(void *stu) { sleep(1); printf("student age is %d, name is %s, id is %s\n",((struct student *)stu)->age, ((struct student *)stu)->name, ((struct student *)stu)->id); return (void *)0; } int main(int argc, char *argv[]) { pthread_t tid; int err; int *rval; struct student stu; stu.age = 20; memcpy(stu.name, "zhangsan", 20); memcpy(stu.id, "007", 5); err = pthread_create(&tid, NULL, thread_fun, (void *)(&stu)); if(err != 0) { printf(" create new thread failed\n"); return 0; } int i; printf("main thread have %d args\n", argc); for(i=0; i<argc; i++) { printf("main thread args is %s\n", argv[i]); } pthread_exit(rval); } 四、线程的四个基本状态 1、就绪:当线程刚被创建时就处于就绪状态,或者当线程被解除阻塞以后也会处于就绪状态。就绪的线程在等待一个可用的处理器,当一个运行的线程被抢占时,它立刻又回到就绪状态 2、运行:当处理器选中一个就绪的线程执行时,它立刻变成运行状态 3、阻塞:线程会在以下情况下发生阻塞:试图加锁一个已经被锁住的互斥量,等待某个条件变量,调用singwait等待尚未发生的信号,执行无法完成的I/O信号,由于内存页错误 4、终止:线程通常启动函数中返回来终止自己,或者调用pthread_exit退出,或者取消线程 五、线程的回收 1、线程的分离属性: 分离一个正在运行的线程并不影响它,仅仅是通知当前系统该线程结束时,其所属的资源可以回收。一个没有被分离的线程在终止时会保留它的虚拟内存,包括他们的堆栈和其他系统资源,有时这种线程被称为“僵尸线程”。创建线程时默认是非分离的 2、如果线程具有分离属性,线程终止时会被立刻回收,回收将释放掉所有在线程终止时未释放的系统资源和进程资源,包括保存线程返回值的内存空间、堆栈、保存寄存器的内存空间等。 3、终止被分离的线程会释放所有的系统资源,但是你必须释放由该线程占有的程序资源。由malloc或者mmap分配的内存可以在任何时候由任何线程释放,条件变量、互斥量、信号灯可以由任何线程销毁,只要他们被解锁了或者没有线程等待。但是只有互斥量的主人才能解锁它,所以在线程终止前,你需要解锁互斥量 <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","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> 阅读(182) | 评论(0) | 转发(0) | 0上一篇:关于直播,所有的技术细节都在这里了
下一篇:查找指定字符串在某个字符串中的出现次数
相关热门文章 SHTML是什么_SSI有什么用...查看linux中某个端口(port)...卡尔曼滤波的原理说明...shell中字符串操作关于java中的“错误:找不到或... 给主人留下些什么吧!~~ 评论热议