多线程编程API

创建线程和结束线程

1. pthread_create
创建一个线程的函数是pthread_create,定义如下:

#include 

// pthread是新线程的标识符,后续pthread_*函数通过他来引用新线程。
// attr 表示线程属性,attr == NULL时时默认属性。
// start_routin和arg分别表示新线程将运行的函数和参数。
int pthread_create(pthread_t* thread, const pthread_attr_t* attr,
                   void*(*start_routine)(void*), void* arg);

#include 
typedef unsigned long int pthread_t;

pthread_create 成功返回0,失败返回错误码。

2.pthread_exit
线程一旦被创建好,内核就可以通过调度内核线程来执行start_routine函数指针所指向的函数了。线程在结束时,最好调用如下函数,保证线程的安全退出。

    #include 

    void pthread_exit(void * retval);

pthread_exit 函数通过retval 参数向 线程的回收者传递其退出信息。它执行完之后不会回到调用者,而且永远不会。

3. pthread_join
一个进程中的所有线程都可以调用pthread_join函数来回收其他线程。即等待其他线程退出。这类似于回收进程的wait操作。

  #include 
  int pthread_join(pthread_t pthread, void** retval);

该函数被一直阻塞,直到目标线程被回收为止。

4.pthread_cancel
有时我们希望
异常终止**一个线程,即取消线程。它是通过:

  int pthread_cancel(pthread_t  thread);

thread是线程描述符。
成功时返回0,失败则返回错误码。是否可以取消根据线程的属性来进行判断。

线程属性

pthread_attr_t 结构体定义了一套完整的线程属性。

  #include 
  #define __SIZEOF_PTHREAD_ATTR_T 36 
  typedef union {
      char __size[__SIZEOF_PTHREAD_ATTR_T];
      long int __align;
  } pthread_attr_t;

这个结构中我们可以看到,线程的各种属性都包含在一个字符数组中。线程库有一系列的函数来操作 pthread_attr_t 类型的变量。

你可能感兴趣的:(多线程编程API)