Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279260
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类: 嵌入式

2010-08-10 11:08:57

完成一个线程实验。

 

原理:

1 线程是轻量级的进程,进程之间共享内存但是有独立的线索和堆栈。

2 创建函数 pthread_creat

3 挂起函数 pthread_join

 

步骤:

1 在宿主机上编辑,交叉编译程序。本程序Makefile文件有一点特殊,所以需要注意:

 

EXEC = file

OBJS = file.o

SRC  = file.c

 

CC = arm-linux-gcc

#LD = arm-linux-ld

CFLAGS += -O2 -Wall

LDFLAGS += -lpthread(连接程序时候需要加上这个后缀,否则无法执行)

 

all:$(EXEC)

 

$(EXEC):$(OBJS)

    $(CC) $(LDFLAGS) -o $@ $(OBJS)

 

%.o:%.c

    $(CC) $(CFLAGS) -c $< -o $@

 

clean:

    @rm -vf $(EXEC) *.o *~

2 在开发板上执行程序(NFS方式)

 

现象:

宿主机

开发板

 

源代码来自周立功:

#include

#include

#include

#include

#include

 

int task1(int *cnt)

{

    while(*cnt<5){

        sleep(1);

        (*cnt)++;

        printf("task1 cnt=%d.\n",*cnt);

    }

    return (*cnt);

}

 

int task2(int *cnt)

{

        while(*cnt<5){

                sleep(2);

                (*cnt)++;

                printf("task2 cnt=%d.\n",*cnt);

        }

        return (*cnt);

}

 

int main(int argc,char **argv)

{

    int result;

    int t1=0;

    int t2=0;

    int rt1,rt2;

    pthread_t thread1,thread2;//线程ID

 

    result=pthread_create(&thread1,PTHREAD_CREATE_JOINABLE,(void *)task1,(void *)&t1);//创建线程1

    if(result)

    {

        perror("pthread_create:task1.\n");

        exit(EXIT_FAILURE);

    }

 

    result=pthread_create(&thread2,PTHREAD_CREATE_JOINABLE,(void *)task2,(void *)&t2);//创建线程2

        if(result)

        {

                perror("pthread_create:task2.\n");

                exit(EXIT_FAILURE);

        }

 

    pthread_join(thread1,(void *)&rt1);//挂起线程

    pthread_join(thread2,(void *)&rt2);

 

    printf("total %d times.\n",t1+t2);//打印运行次数

    printf("return value of task1:%d.\n",rt1);

    printf("return value of task2:%d.\n",rt2);

 

    exit(EXIT_SUCCESS);

}

 

阅读(379) | 评论(0) | 转发(0) |
0

上一篇:信号

下一篇:UDP

给主人留下些什么吧!~~