LinuxC多线程编程第一篇:线程创建

        本人在做Android NDK移植的时候遇到了C语言线程,当然线程这些内容在谭浩强的书中根本没有介绍。Android系统用的是Linux内核,所以Linux C多线程编程对Android NDK非常重要,Android Framework中用到这些会更多。
废话不多说,我们切入正题。

如何创建一个多线程?
以下就是创建线程的函数:
int  pthread_create(pthread_t *thread,pthread_attr_t* attr ,void *(*start_routine)(void*),void * arg);
返回值:成功返回0,失败返回错误号。
参数:
pthread_t *thread :表示的是一个指向本线程的id的地址。由此可见线程id的类型是pthread_t,它保证当前进程的线程唯一性。在不同的系统中pthread_t 类型可能是不同的类型,它可能是一个整数、结构体。也可以是一个地址。
pthread_attr_t* attr:表示的是线程属性,这里不多讲。我们一般把它设为NULL,它会取系统的默认值。
void *(*start_routine)(void*):它是一个函数地址,一旦线程启动的时候,这个函数就会回调,类似Java线程中的run()方法。
void * arg:表示start_routine回调函数的参数,Java中run方法没有参数。这是它们的重要区别。

创建文件thread01.c

#include 
#include 
#include 
#include 
#include 

pthread_t ntid;
void printids(const char* s) 
{
   pid_t pid;
   pthread_t tid;
   pid = getpid(); //这里表示当前进程ID
   tid = pthread_self(); ////这里表示当前线程ID
   printf("=================%sthread,pid=%d,tid==%u\n",s,(int)pid,(unsigned int)tid);
}


void *fn(void *arg) 
{
  printids(arg);
  return NULL;
}

int main(void) 
{
  int err;
  err = pthread_create(&ntid,NULL,fn,"new "); 
  printids("main ");
  sleep(1); //睡眠一秒
  return 0;
}


编译运行:
root@jefry-laptop:/home/jefry/Desktop/thread# gcc thread01.c -lpthread
root@jefry-laptop:/home/jefry/Desktop/thread# ./thread01.out
=================new thread,pid=2055,tid==3079015280    //这是非主线程运行的结果
=================main thread,pid=2055,tid==3079018176   //这是主线程运行的结果

你可能感兴趣的:(c/c++)