linux c多线程总结: 1:关于线程和进程 a:使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给 它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个 线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间 彼此切换所需的时间也远远小于进程间切换所需要的时间。 b:使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行, 这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用, 这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据 更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。 2:线程的基本操作步骤: a:声明线程标识符变量 pthread_t xx; b:写线程操作函数 void threadfunction(){...} c:如果需要对某些变量和操作加锁,那么先声明一个线程锁标识符变量,并且初始化 pthread_mutex_t mut; pthread_mutex_init(&mut,NULL); //子线程中 pthread_mutex_lock(&mut); ...//在需要加锁的地方前后加上 pthread_mutex_unlock(&mut); d:创建运行线程 pthread_create(1,2,3,4);//1:线程标识符方便以后对该线程的操作,因为一个线程函数可以被创建为多个线程,2:线程属性,3:线程函数,4:函数参数 e:结束线程 主线程中:(阻塞函数)pthread_join(1,2)//1:xc标识符,2:存储函数返回值的指针 子线程中:pthread_exit(1)//1:存储返回值 3:关于线程属性: 属性结构为pthread_attr_t,它同样在头文件/usr/include/pthread.h中定义。属性值不能直接设置, 须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数 之前调用。属性对象主要包括是否绑定、是否分离、堆栈地址、堆栈大小、优先级。默认的属性为非 绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。 除了可以在pthread_create中第二个参数那里设置属性以外,还可以通过函数pthread_attr_setscope()设置绑定状态, 使用pthread_detach()设置分离状态,使用pthread_attr_setschedparam()设置优先级