论文网
教师招聘网
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
Linux下多线程编程详解

[科技论文网] http://www.scipapers.com    2007-11-13  

    Linux下多线程编程详解

    线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。
    现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。

      为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。

      使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。

      使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。

      除了以上所说的优点外,不和进程比较,多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:

      1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。

      2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

      3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

      下面我们先来尝试编写一个简单的多线程程序。

      简单的多线程编程

      Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有关文档说明。下面我们展示一个最简单的多线程程序 pthread_create.c。


    一个重要的线程创建函数原型:
    #include <pthread.h>
    int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg);

        返回值:若是成功建立线程返回0,否则返回错误的编号
        形式参数:
                    pthread_t *restrict tidp 要创建的线程的线程id指针
                    const pthread_attr_t *restrict attr 创建线程时的线程属性
                    void* (start_rtn)(void) 返回值是void类型的指针函数
                    void *restrict arg   start_rtn的行参
                    
    例程1:                               
        功能:创建一个简单的线程
        程序名称:pthread_create.c         
    /********************************************************************************************
    **    Name:pthread_create.c
    **    Used to study the multithread programming in Linux OS
    **    Author:zeickey
    **    Date:2006/9/16       
    **    Copyright (c) 2006,All Rights Reserved!
    *********************************************************************************************/

    #include <stdio.h>
    #include <pthread.h>

    void *myThread1(void)
    {
        int i;
        for (i=0; i<100; i++)
        {
            printf("This is the 1st pthread,created by zieckey.\n");
            sleep(1);//Let this thread to sleep 1 second,and then continue to run    来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

1 2 3 4 5 下一页  
Linux下多线程编程详解
Linux下select调用的过程     VXWORKS内核分析
最新论文
·[程序设计]嵌入式linux启动信息完全注释
·[程序设计]Linux2.6 启动传递命令行分析
·[程序设计]用systemtap研究内核
·[程序设计]Linux2.6内核epoll 网络编程
·[程序设计]Linux2.6下ESP包解析流程
·[程序设计]进程间通信的11种方法
·[程序设计]linux进程间通信总结
·[程序设计]Linux下select调用的过程
·[程序设计]Linux下多进程编程详细解析
·[程序设计]Linux 计时概要
 
 

搜索论文

Google
论文分类

 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com