[关闭]
@cxm-2016 2016-11-24T21:43:24.000000Z 字数 1289 阅读 2471

C++多线程编程(二)——线程操作

C++多线程编程

版本:2
作者:陈小默
声明:禁止商业,禁止转载

发布于:作业部落



二、线程操作

在程序运行时,都至少会有一条线程执行。这条线程被称为主线程,由操作系统创建。接下来我们将介绍POSIX中线程操作。

2.1 线程创建

int pthread_create(pthread_t* thread, pthread_attr_t const* attr, void *(*start_routine)(void*), void* arg);

  • thread:线程ID。不能为NULL。
  • attr:线程创建参数。可以为NULL。
  • start_routine:线程的起始函数地址。不能为NULL。注意:线程一旦创建成功将会立即执行。
  • args:传递给线程的参数,可以为NULL。
  • return:线程创建成功返回0。
  1. typedef long pthread_t;
  2. typedef struct {
  3. uint32_t flags;
  4. void* stack_base;
  5. size_t stack_size;
  6. size_t guard_size;
  7. int32_t sched_policy;
  8. int32_t sched_priority;
  9. #ifdef __LP64__
  10. char __reserved[16];
  11. #endif
  12. } pthread_attr_t;

2.2 终止线程

线程在执行完毕后终止。当线程返回到创建它的函数时会自动终止。线程的资源将会被释放,在某些情况下,我们可以显式的调用线程终止函数来终止一个正在运行的线程。然后,任何等待该线程终止的线程都将会收到这个终止线程的ID或终止信号。如果终止线程是主线程,这可能会导致 整个进程的终止。如果一个被终止的线程是整个进程的最后一个线程,就会导致整个进程的终止。

进程内的一个线程可以强制另一个线程终止,但是不能强制自己终止。

POSIX中会导致终止线程的函数有

void pthread_exit(void* status);

  • status:线程退出状态

int pthread_detach(pthread_t threadID);

  • threadID:线程ID。
  • return:成功返回0。

int pthread_cancel(pthread_t threadID);

  • threadID:线程ID。
  • return:成功返回0。

接下来给出一个简单的多线程示例

  1. #include <iostream>
  2. #include <pthread.h>
  3. using namespace std;
  4. void* say_hello(void* args){
  5. cout << "Hello world!" << endl;
  6. }
  7. int main(){
  8. int threadID[5];
  9. for(int i = 0; i < 5; ++i) {
  10. int ret = pthread_create(threadID + i, NULL, say_hello, NULL);
  11. if (ret != 0) {
  12. cout << "线程创建出错"<< endl;
  13. }
  14. }
  15. pthread_exit(NULL);
  16. }

[1]C++面向对象多线程编程.人民邮电出版社.2003-4

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注