今天我们来学习下Unix 线程的知识。首先我们来了解下什么是Unix 线程呢?Unix 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个Unix 线程可以创建和撤销另一个Unix 线程;同一个进程中的多个Unix 线程之间可以并发执行。
在Unix 中,一个进程让另外实体进行某项事务而采取的操作为fork的一个子进程,子进程只是将父进程的数据区拷贝一份到自己的数据区。在符合POSIX标准的Unix 操作系统下,同一个进程的Unix 线程之间共享进程指令、大多数数据(线程私有数据除外)、信号处理方式、进程运行环境等。由于线程共享进程的全局变量,因此可以采用用户自己编写的消息队列来实现数据的共享。
建立多任务模型,并用Unix 线程来实现
符合POSIX标准的UNIX操作系统提供了Unix 线程的控制函数,如:Unix 线程的创建和终止、线程之间的互斥、线程之间的同步等。利用这些系统函数可以成功地模拟消息队列,来实现线程间数据共享和同步,以完成多任务的实时性。为成功地描述线程间数据共享和同步,以下列任务模型为例。
首先建立消息队列属性数据结构
- #define MAXQUEUE 30
- typedef struct mq_attrib {
- char name[20];
- pthread_mutex_t mutex_buff;
- pthread_mutex_t mutex_cond;
- pthread cond_t cond;
- int maxElements;
- int elementLength;
- int curElementNum;
- caddr_t buff;
- }mq_attrib,mq_attribstruct,mq_attrib_t;
- mq_attrib_t msqueue[MAXQUEUE];
数据结构定义了消息队列的名字name,最大消息个数maxElements,单个消息长度elementLength,当前消息个数curElementNum,存放消息的缓冲区buff,保护缓冲区锁mutex_buff,线程同步条件变量cond,保护线程同步条件变量锁mutex_cond。
一些基本的Unix 线程的知识,我们这次就介绍到这里,我们以后会有更多的Unix 线程的知识的介绍的,请大家继续关注。
【编辑推荐】