| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

Linux pthread 编程

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