linux操作系统下多线程使得流程设计更加方便,子线程申请一般使用下面函数:
int pthread_creat(pthread_t *tidp,const pthread_addr_t *addr,void *(*start_rtn)(void),void *args);
其中tidp为线程id号;addr为线程属性,通常为空;第三个参数为线程执行的函数指针,第四个参数为线程函数的参数,通常为空。
若创建成功则返回0,未成功则返回错误号。在编译时由于该函数所需要的库lpthread.a不是常用的C库,因此需要在编译命令后加上-lpthread。同时需要加头文件#include <pthread.h>
下面为子线程例子程序,也是借鉴其他人的:
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
void *mythread1(void *arg)
{
int i;
//for(i=0;i<5;i++)
while(1)
{
printf("---this is thread 1 !-----\n");
sleep(2);
}
}
void *mythread2(void *arg)
{
int i;
//for(i=0;i<5;i++)
while(1)
{
printf("---this is thread 2 !-----\n");
sleep(2);
}
}
int main(int argc ,char* argv[])
{
printf("---hello world !-----\n");
printf("---nihao,linux!\n");
pthread_t id1,id2;
int ret;
ret = pthread_create(&id1,NULL,mythread1,NULL);
if(ret)
{
printf("---creat pthead 1 error\n");
}
ret = pthread_create(&id1,NULL,mythread2,NULL);
if(ret)
{
printf("---creat pthead 2 error\n");
}
//pthread_join(id1,NULL);
//pthread_join(id2,NULL);
while(1)
{
printf("---this is main !-----\n");
sleep(3);
}
return 0;
}
生成执行文件:
arm-linux-gnueabihf-gcc -o main.o -c main.c -lpthread
问题:
./main: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory
需要把libgcc_s.so.1拷贝到板卡的/lib或者/usr/lib文件夹中就可以。