MyException - 我的异常网
当前位置:我的异常网» C语言 » 想讨论一上关于多线程中设置分离属性pthread_attr_s

想讨论一上关于多线程中设置分离属性pthread_attr_setdetachstated的原理

www.MyException.Cn  网友分享于:2013-02-19  浏览:12次
想讨论一下关于多线程中设置分离属性pthread_attr_setdetachstated的原理
先声明下,自己对多线程的理解很浅,很想和大家交流。

我在自己的多线程程序中,会发现利用ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);对线程设置分离属性状态后,每个线程实际上只工作一部分,就自行退出,而不是完成我指定的任务再退出。也就是说,一个线程在被其它线程抢占了cpu之后,它便不再继续执行了,这样的话,我会得到一个这样的结果:第一个产生的线程占用cpu较长,那么任务完成较多,第二个稍短,那么任务完成较少,可能由于抢占的时间递减(可能 或许 大概是这样),之后的进程都比前一个进程完成的任务少,直到最后一个进程退出后,程序也退出。我很想知道,分离属性,怎么样去设置和同步才是正确的?也就是每个线程都完成我指定任务后再自行退出。
多线程

------解决方案--------------------
你對pthread_attr_setdetachstate這個函數的理解有偏差,看看下面的文章:

http://blog.chinaunix.net/uid-26983585-id-3315953.html
------解决方案--------------------
线程的分离状态决定一个线程以什么样的方式来终止自己。在上面的例子中,我们采用了线程的默认属性,即为非分离状态,这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程不是这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根据自己的需要,选择适当的分离状态。设置线程分离状态的函数为pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)。第二个参数可选为PTHREAD_CREATE_DETACHED(分离线程)和 PTHREAD _CREATE_JOINABLE(非分离线程)。这里要注意的一点是,如果设置一个线程为分离线程,而这个线程运行又非常快,它很可能在pthread_create函数返回之前就终止了,它终止以后就可能将线程号和系统资源移交给其他的线程使用,这样调用pthread_create的线程就得到了错误的线程号。要避免这种情况可以采取一定的同步措施,最简单的方法之一是可以在被创建的线程里调用pthread_cond_timewait函数,让这个线程等待一会儿,留出足够的时间让函数pthread_create返回。设置一段等待时间,是在多线程编程里常用的方法。但是注意不要使用诸如wait()之类的函数,它们是使整个进程睡眠,并不能解决线程同步的问题。

随便搜的一点东西。

还是细致的看书比较好。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有