在AnySQL.net中搜索标签(Tags) 'POSIX' 的结果:

终于找到POSIX Thread挂起的原因了

    昨天跑的Thread程序还是停住了, 原因是不能再创建新的线程了, 返回错误代码11, 表示达到了最大能创建的线程数了. 一开始很不明白, 因为就我这个程序, 应当只会有一个线程在去行, 不可能多个. 于是我检查了一下进程占用的内存, 居然高达132MB, 因此是系统资源到了最大限制了(POSIX对最多进程数的限制).     于是我想起了当初用fork/vfork时, 因为没有加入一行代码, 导致了进程结束后, 系统并没有自动回收占用的有关资源, 因此线程可能也遇到了同样的问题. 经过一翻网上搜索, 终于明白了其中的道理.     创建线程时可以指定很多的属性, 如可Join的线程或者是自动Detach的线程, 默认是可Join的. 在系统中有一个定长数组, 存放了历来创建线的线程的信息, 可Join的线程虽然运行结束了, 但是资源不会回收, 要等主进程来检查, 因此线程创建多了, 这个数据全都满了, 所以不能再创建线了. 在大部份程中, 主进程创建了几个子进程后, 就调用pthread_join方法来等所有的子线程结束, 这时就相当于主进程去检查这个数据,...

从OCIThread回到POSIX Thread编程模式

    我要实现的任务其实很简单, 就是想要每隔一定的时间去数据库中获得一些信息, 获得这些信息可能需要运行八到十个SQL语句, 随着数据库上的连接数, 负荷等的不同, 这些查询所需要的时间是不一定的, 有可能十分之一秒就可以返回, 也可能要几秒. 但是我想要的是以固定的间隔打印出这些数据. 于是我就想了一个主进程, 隔一定的时间去产生一个线程, 由线程去执行这些SQL语句, 打印出信息, 这样可以保证时间是很均匀的.     于是我就从fork到vfork, 再到thread(Solaris), 再到pthread(Solaris和Linux), 然后再到OCIThread. 上了OCIThread后, 还有程序挂起的情况发生, 因此并没有解决我想要解决的问题, 一开始是用自已的变量来防止并行执行OCI调用, 后来改成OCIThreadMutex, 还是一样, 并且发现OCIThread后, 服务器端的Oracle后台进程的CPU消耗要比普通方式高出20%左右, 因此OCIThread并没有优势. 于是退出到了POSIX的线程调用, 这次用了上POSIX上的Mutex.     程序还在测试, 以前用多线程方式时, 总是12小时左右, 整个程序就挂起了. 现在分成两路来测试,...

Unix/Linux下C语言POSIX多线程程序示例

    原想用fork机制来实现多个任务并发的, 结果始终没有搞定其中的数据共享问题, 就换成用POSIX线程算了. #include <pthread.h> #include <stdio.h> void *subCall(void *param) {   int *p = param;   (*p) ++;   return NULL; } int main() {    int i, *p=NULL;    int err;    pthread_t pid;    p = (int *)...

根据标记(Tags)来查找:

分类 | Categories

本站基于MT-3.36免费版, 和Fenng设计的模板.
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql