linux多线程pthread
来源:互联网 发布:个人卖数据 编辑:程序博客网 时间:2024/05/17 06:08
http://blog.chinaunix.net/uid-22163090-id-401346.html
1. 所谓线程就是“一个进程内部的一个控制序列”。也就是一个进程内部的并行的基础!
2. Linux进程可以看成只有一个控制线程:
一个进程在同一时刻只做一件事情。有了多个控制线程以后,
在程序设计时可以把进程设计成在同一时刻能够做不止一件事,
每个线程处理各只独立的任务。即所谓并行!
3. 线程的优点:
(1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间的代码。
(2) 多个线程可以自动共享相同的存储地址空间和文件描述符。
(3) 有些问题可以通过将其分解从而改善整个程序的吞吐量。
(4) 交互的程序可以通过使用多线程实现相应时间的改善,多线程可以把程序中
处理用户输入输出的部分与其它部分分开。
4. 线程的缺点:
线程也有不足之处。编写多线程程序需要更全面更深入的思考。
在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的
变量而造成不良影响的可能性是很大的。调试一个多线程程序也
比调试一个单线程程序困难得多。
5. 线程标识:
我们已经知道进程有进程ID就是pid_t,那么线程也是有自己的ID的pthread_t数据类型!
注意:实现的时候可以用一个结构来代表pthread_t数据类型,所以可以移植的操作系统
不能把它作为整数处理。因此必须使用函数来对来对两个线程ID进行比较。
>>>>>:
关于比较线程ID函数:
#include <pthread.h>
int pthread_equal(pthread_t tid1,pthread_t tid2 );
注意:在线程中,线程ID的类型是pthread_t类型,由于在Linux下线程采用POSIX标准,
所以,在不同的系统下,pthread_t的类型是不同的,比如在ubuntn下,是unsigned long类型,
而在solaris系统中,是unsigned int类型。而在FreeBSD上才用的是结构题指针。
所以不能直接使用==判读,而应该使用pthread_equal来判断。