分类: 嵌入式
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);
}