初步讲解Unix 线程知识

文章中,我们会为大家介绍下Unix 线程的知识。Unix 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. ......

今天我们来学习下Unix 线程的知识。首先我们来了解下什么是Unix 线程呢?Unix 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个Unix 线程可以创建和撤销另一个Unix 线程;同一个进程中的多个Unix 线程之间可以并发执行。

在Unix 中,一个进程让另外实体进行某项事务而采取的操作为fork的一个子进程,子进程只是将父进程的数据区拷贝一份到自己的数据区。在符合POSIX标准的Unix 操作系统下,同一个进程的Unix 线程之间共享进程指令、大多数数据(线程私有数据除外)、信号处理方式、进程运行环境等。由于线程共享进程的全局变量,因此可以采用用户自己编写的消息队列来实现数据的共享。

建立多任务模型,并用Unix 线程来实现

符合POSIX标准的UNIX操作系统提供了Unix 线程的控制函数,如:Unix 线程的创建和终止、线程之间的互斥、线程之间的同步等。利用这些系统函数可以成功地模拟消息队列,来实现线程间数据共享和同步,以完成多任务的实时性。为成功地描述线程间数据共享和同步,以下列任务模型为例。

首先建立消息队列属性数据结构

  1. #defineMAXQUEUE30
  2. typedefstructmq_attrib{
  3. charname[20];
  4. pthread_mutex_tmutex_buff;
  5. pthread_mutex_tmutex_cond;
  6. pthreadcond_tcond;
  7. intmaxElements;
  8. intelementLength;
  9. intcurElementNum;
  10. caddr_tbuff;
  11. }mq_attrib,mq_attribstruct,mq_attrib_t;
  12. mq_attrib_tmsqueue[MAXQUEUE];

数据结构定义了消息队列的名字name,最大消息个数maxElements,单个消息长度elementLength,当前消息个数curElementNum,存放消息的缓冲区buff,保护缓冲区锁mutex_buff,线程同步条件变量cond,保护线程同步条件变量锁mutex_cond。

一些基本的Unix 线程的知识,我们这次就介绍到这里,我们以后会有更多的Unix 线程的知识的介绍的,请大家继续关注。

【编辑推荐】

  1. 讲解Unix内核超级块知识
  2. 知识讲堂Unix内核教学
  3. 浅析Unix内核索引结点表
  4. Unix内核与Linux内核大比拼
  5. 知识讲解Unix 消息队列