返回首页 设为首页 加入收藏 联系我们
 
个人求职 企业招聘 培训频道 职业指导 猎头服务 红旗Linux
HR频道
国际频道
名牌高校
创业家园
人才论坛
 
 当前位置:精盈人才鹰网 > Linux技术交流 > 正文
Linux pthread 编程

Linux下线程级编程并不是很复杂,但是不容易使用。最主要的原因是编程人员对于Linux系统自身的线程机制理解的不是很深刻,在这种情况下去使用线程那么许多“看不到”的事情就会降临,自然线程的编写者是看不到这些的。所以线程看起来比较简单,实则,是需要经过精心修炼才能运用自如的。下面是我个人在学习线程编程过程中积累的一点经验,记录如下:YimLinux联盟
YimLinux联盟
什么是线程?YimLinux联盟
    Window下线程的概念应该已经很成熟,那么Linux的线程是不是跟windows一样呢?我们不必深究其中的细节,它们的共同目标就是让一个进程能够更快的执行自己的代码,更高效的工作。这就是说如果有一个任务,你不想用多进程实现,但又希望它工作的很快,你可以选择多线程。至于多线程跟多进程,那个更,在此我不讲述,有兴趣的自己学习相关的资料吧。YimLinux联盟
YimLinux联盟
线程的创建方法YimLinux联盟
YimLinux联盟
    我们知道进程的创建需要fork来完成。那么,线程也差不多需要调用系统调用来产生新的线程。linux下就是pthread_create()这个API,只要将必要的参数初始化就可以产生一个新的线程执行自己的代码。YimLinux联盟
YimLinux联盟
    首先,介绍一下线程所需要的头文件pthread.h。包含了这个头文件以后,我们就可以使用线程相关的API以及数据结构了(注意:包含头文件的同时,编译的时候要加上-lpthread告诉编译器线lib的位置)。YimLinux联盟
YimLinux联盟
下面,介绍线程相关的数据结构和API:YimLinux联盟
    pthread_t是一个表示线程类型的数据结构,只要有一个线程就存在一个这样的标识符。它是在创建线程的时候必须指定的,跟进程标识符很相似。YimLinux联盟
YimLinux联盟
    pthread_create()这个API是创建线程的一个API,所有关于新线程的设置都要在这里指定。因此,它的参数比较复杂,我们一个一个看。YimLinux联盟
   YimLinux联盟
练习的code:YimLinux联盟
YimLinux联盟
int thx = 10;YimLinux联盟
int thy = 100;YimLinux联盟
sem_t sem;YimLinux联盟
YimLinux联盟
void* thread_print(void* parameter){YimLinux联盟
        unsigned int i = *((unsigned int*)parameter);YimLinux联盟
        while(i--){YimLinux联盟
        sem_wait(&sem);YimLinux联盟
                fprintf(stderr, "in thread_print!\n");YimLinux联盟
        }YimLinux联盟
        return (void*)(thx);YimLinux联盟
}YimLinux联盟
void* thread_print0(void* parameter){YimLinux联盟
        unsigned int i = *((unsigned int*)parameter);YimLinux联盟
        while(i--){YimLinux联盟
        sem_wait(&sem);YimLinux联盟
                fprintf(stderr, "in thread_print 00000!\n");YimLinux联盟
        }YimLinux联盟
        return (void*)(thy);YimLinux联盟
}YimLinux联盟
YimLinux联盟
cout<<"Pthread programming test!"<<endl;YimLinux联盟
pthread_t thread_id;YimLinux联盟
pthread_t thread_id0;YimLinux联盟
sem_init(&sem, 0 , 200);YimLinux联盟
int thread_data = 100;YimLinux联盟
int thread_data0 = 100;YimLinux联盟
int res, res0;YimLinux联盟
int* pres = & res;YimLinux联盟
int* pres0 = & res0;YimLinux联盟
pthread_create(&thread_id, NULL, &thread_print, &thread_data);YimLinux联盟
pthread_create(&thread_id0, NULL, &thread_print0, &thread_data0);YimLinux联盟
pthread_join(thread_id, (void**)(&(res)));YimLinux联盟
pthread_join(thread_id0, (void**)&(res0));YimLinux联盟
cout<<"thread res is "<<res<<"thread0 res 0 is "<<res0<<endl;YimLinux联盟
精盈人才鹰网 轻松求职 满意招聘 http://www.eglhr.com
日期:2007年11月20日 | 关闭
收费标准 |  付款方式  |  招商加盟  |  招聘流程  |  广告服务  |  关于我们 |  联系我们 |  友情连接

Copyright(C) 2005 - 2008 SELLCN.COM All Rights Reserved
电 话:0755-25313588 25313733传 真:0755-82903206
公司地址:深圳市福田区民田路城建购物公园B区336-3