@cxm-2016
2016-11-24T21:43:24.000000Z
字数 1289
阅读 2444
C++多线程编程
版本:2
作者:陈小默
声明:禁止商业,禁止转载
发布于:作业部落
在程序运行时,都至少会有一条线程执行。这条线程被称为主线程,由操作系统创建。接下来我们将介绍POSIX中线程操作。
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。
typedef long pthread_t;
typedef struct {
uint32_t flags;
void* stack_base;
size_t stack_size;
size_t guard_size;
int32_t sched_policy;
int32_t sched_priority;
#ifdef __LP64__
char __reserved[16];
#endif
} pthread_attr_t;
线程在执行完毕后终止。当线程返回到创建它的函数时会自动终止。线程的资源将会被释放,在某些情况下,我们可以显式的调用线程终止函数来终止一个正在运行的线程。然后,任何等待该线程终止的线程都将会收到这个终止线程的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。
接下来给出一个简单的多线程示例
#include <iostream>
#include <pthread.h>
using namespace std;
void* say_hello(void* args){
cout << "Hello world!" << endl;
}
int main(){
int threadID[5];
for(int i = 0; i < 5; ++i) {
int ret = pthread_create(threadID + i, NULL, say_hello, NULL);
if (ret != 0) {
cout << "线程创建出错"<< endl;
}
}
pthread_exit(NULL);
}
[1]C++面向对象多线程编程.人民邮电出版社.2003-4