摘要:
//c语言线程池实现#ifndef __THREADPOOL__#define __THREADPOOL__#ifdef __cplusplusextern "C" {#endif //#endif#include#include#include#include#include#include/**线程池里所有运行和等待的任务都是一个CThread_Worker*由于所有任务都在链表里,所以是一个链表结构*/typedef struct Worker{ /*回调函数,任务运行时会调用此函数*/ void (*process)(void *arg); void *arg;/* 阅读全文
摘要:
在一个进程里,线程的调度有抢占式或者非抢占的模式。在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统将定期的中断当前正在执行的线程,将CPU分配给在等待队列的下一个线程。所以任何一个线程都不能独占CPU。每个线程占用CPU的时间取决于进程和操作系统。进程分配给每个线程的时间很短,以至于我们感觉所有的线程是同时执行的。实际上,系统运行每个进程的时间有2毫秒,然后调度其他的线程。它同时他维持着所有的线程和循环,分配很少量的CPU时间给线程。线程的的切换和调度是如此之快,以至于感觉是所有的线程 阅读全文
摘要:
线程应用程序最常见导致创建线程失败的原因是线程栈大小的设置。创建一个新的线程,默认情况下系统为线程栈预留了2MB的寻址空间。线程栈起始于进程虚拟内存的高端地址,并向虚拟内存底端地址方向扩展。取决于线程本身的大小以及其它线程内存分配的情况,进程虚拟地址空间消耗过快可能导致创建线程失败。这里有一个测试程序可以看到,Linux下最多可以创建多少个线程。#include #include #include void *ThreadFunc(){ static int count = 1; printf ("Create thread %d\n", count); pthread_d 阅读全文