您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制Linux下的多线程编程 正文
Linux下的多线程编程

Linux下的多线程编程

点击数:7472 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   电脑-单片机-自动控制

    sem_t sem;

    /* 从文件1.dat读取数据,每读一次,信号量加一*/

    void ReadData1(void){

    FILE *FP=fopen("1.dat","r");

    while(!feof(fp)){

    fsCANf(fp,"%d %d",&stack[size][0],&stack[size][1]);

    sem_post(&sem);

    ++size;

    }

    fclose(fp);

    }

    /*从文件2.dat读取数据*/

    void ReadData2(void){

    FILE *fp=fopen("2.dat","r");

    while(!feof(fp)){

    fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]);

    sem_post(&sem);

    ++size;

    }

    fclose(fp);

    }

    /*阻塞等待缓冲区有数据,读取数据后,释放空间,继续等待*/

    void HandLEData1(void){

    while(1){

    sem_wait(&sem);

    printf("Plus:%d+%d=%dn",stack[size][0],stack[size][1],

    stack[size][0]+stack[size][1]);

    --size;

    }

    }

    void HandlEDAta2(void){

    while(1){

    sem_wait(&sem);

    printf("Multiply:%d*%d=%dn",stack[size][0],stack[size][1],

    stack[size][0]*stack[size][1]);

    --size;

    }

    }

    int main(void){

    pthread_t t1,t2,t3,t4;

    sem_init(&sem,0,0);

    pthread_create(&t1,NULL,(void *)HandleData1,NULL);

    pthread_create(&t2,NULL,(void *)HandleData2,NULL);

    pthread_create(&t3,NULL,(void *)ReadData1,NULL);

    pthread_create(&t4,NULL,(void *)ReadData2,NULL);

    /* 防止程序过早退出,让它在此无限期等待*/

    pthread_join(t1,NULL);

    }

    在Linux下,我们用命令gcc -lpthread sem.c -o sem生成可执行文件sem。 我们事先编辑好数据文件1.dat和2.dat,假设它们的内容分别为1 2 3 4 5 6 7 8 9 10和 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 ,我们运行sem,得到如下的结果:

    Multiply:-1*-2=2

    Plus:-1+-2=-3

    Multiply:9*10=90

    Plus:-9+-10=-19

    Multiply:-7*-8=56

    Plus:-5+-6=-11

    Multiply:-3*-4=12

    Plus:9+10=19

    Plus:7+8=15

    Plus:5+6=11

    从中我们可以看出各个线程间的竞争关系。而数值并未按我们原先的顺序显示出来这是由于size这个数值被各个线程任意修改的缘故。这也往往是多线程编程要注意的问题。

    5 小结

    多线程编程是一个很有意思也很有用的技术,使用多线程技术的网络蚂蚁是目前最常用的下载工具之一,使用多线程技术的grep比单线程的grep要快上几倍,类似的例子还有很多。希望大家能用多线程技术写出高效实用的好程序来。



上一页  [1] [2] [3] [4] 


本文关键字:Linux  多线程  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制

上一篇:运用JDOM创建XML