linux pthread头文件,pthread t 头文件_uint8 t 头文件_pthread t 头文件

4608e97e4f9814c792882269f02b1d6a.png

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。

多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。

本教程假设您使用的是 Linux 操作系统,我们要使用 POSIX 编写多线程 C++ 程序。POSIX Threads 或 Pthreads 提供的 API 可在多种类 Unix POSIX 系统上可用,比如 FreeBSD、NetBSD、GNU/Linux、Mac OS X 和 Solaris。

下面的程序,我们可以用它来创建一个 POSIX 线程:

#include

pthread_create (thread, attr, start_routine, arg)

在这里,pthread_create 创建一个新的线程pthread t 头文件,并让它可执行。下面是关于参数的说明:

参数描述

1769d3f2eb3c8d774ca02d537e9d19c1.png

thread

指向线程标识符指针。

一个不透明的属性对象,可以被用来设置线程属性。您可以指定线程属性对象,也可以使用默认值 NULL。

start_routine

线程运行函数起始地址,一旦线程被创建就会执行。

运行函数的参数。它必须通过把引用作为指针强制转换为 void 类型进行传递。如果没有传递参数,则使用 NULL。

创建线程成功时,函数返回 0,若返回值不为 0 则说明创建线程失败。

8085a1ef9e3b93a16ae0d56914248919.png

使用下面的程序,我们可以用它来终止一个 POSIX 线程:

#include

pthread_exit (status)

线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式。程执行函数中被调用,用于线程终结自身,参数dwexitcode用于设置函数的退出码。主要用于终止正在运行的线程,通过参数 retval 来带出线程的退出状态信息,在同一个进程中的其他线程可以通过调用 pthread_join 函数来获取退出状态信息。

setdaemon(), 设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出。需要注意的是,pthread_kill_other_threads_np()并没有通过pthread_cancel()来终止线程,而是直接向管理线程发"进程退出"信号,使所有其他线程都结束运行pthread t 头文件,而不经过cancel动作,当然也不会执行退出回调函数。一般情况下,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线程发来的终止(取消)请求而强制终止。

以下简单的实例代码使用 pthread_create() 函数创建了 5 个线程,每个线程输出"Hello Runoob!":

#include// 必须的头文件#includeusingnamespacestd; #defineNUM_THREADS5// 线程的运行函数void* say_hello(void* args){cout << "Hello Runoob!" << endl;return0;}intmain(){// 定义线程的 id 变量,多个变量使用数组pthread_ttids[NUM_THREADS];for(inti = 0; i < NUM_THREADS; ++i){//参数依次是:创建的线程id,线程参数,调用的函数,传入的函数参数intret = pthread_create(&tids[i], NULL, say_hello, NULL);if(ret != 0){cout << "pthread_create error: error_code=" << ret << endl;}}//等各个线程退出后,进程才结束,否则进程强制结束了,线程可能还没反应过来;pthread_exit(NULL);}

使用 -lpthread 库编译下面的程序:

1493385238274_0.jpg

$ g++ test.cpp -lpthread -o test.o

现在,执行程序,将产生下列结果:

$ ./test.o

Hello Runoob!

Hello Runoob!

Hello Runoob!

Hello Runoob!

Hello Runoob!

以下简单的实例代码使用 pthread_create() 函数创建了 5 个线程,并接收传入的参数。每个线程打印一个 "Hello Runoob!" 消息,并输出接收的参数,然后调用 pthread_exit() 终止线程。

//文件名:test.cpp#include#include#includeusingnamespacestd; #defineNUM_THREADS5void *PrintHello(void *threadid){// 对传入的参数进行强制类型转换,由无类型指针变为整形数指针,然后再读取inttid = *((int*)threadid); cout << "Hello Runoob! 线程 ID, " << tid << endl; pthread_exit(NULL);}intmain(){pthread_tthreads[NUM_THREADS]; intindexes[NUM_THREADS];// 用数组来保存i的值intrc; inti; for(i=0; i < NUM_THREADS; i++ ){cout << "main() : 创建线程, " << i << endl;indexes[i] = i; //先保存i的值// 传入的时候必须强制转换为void* 类型,即无类型指针rc = pthread_create(&threads[i], NULL,PrintHello, (void *)&(indexes[i]));if(rc){cout << "Error:无法创建线程," << rc << endl;exit(-1);}}pthread_exit(NULL);}

现在编译并执行程序,将产生下列结果:

$ g++ test.cpp -lpthread -o test.o

$ ./test.o

main() : 创建线程, 0

main() : 创建线程, 1

Hello Runoob! 线程 ID, 0

main() : 创建线程, Hello Runoob! 线程 ID, 21

main() : 创建线程, 3

Hello Runoob! 线程 ID, 2

main() : 创建线程, 4

Hello Runoob! 线程 ID, 3

Hello Runoob! 线程 ID, 4

1355624226_3909.png

这个实例演示了如何通过结构传递多个参数。您可以程回调中传递任意的数据类型,因为它指向 void,如下面的实例所示:

当上面的代码被编译和执行时,它会产生下列结果:

$ g++ -Wno-write-strings test.cpp -lpthread -o test.o

$ ./test.o

main() : creating thread, 0

main() : creating thread, 1

Thread ID : 0 Message : This is message

main() : creating thread, Thread ID : 21

Message : This is message

main() : creating thread, 3

Thread ID : 2 Message : This is message

main() : creating thread, 4

Thread ID : 3 Message : This is message

Thread ID : 4 Message : This is message

我们可以使用以下两个函数来连接或分离线程:

pthread_join (threadid, status)

pthread_detach (threadid)

所以如果我们在创建线程时就知道不需要了解线程的终止状态,则可以pthread_attr_t结构中的detachstate线程属性,让线程以分离状态启动。使用pthread_create()函数创建线程时,函数第二个参数为null,则使用线程属性的默认参数,其中非分离属性需要程序退出之前运行pthread_join把各个线程归并到一起。pthreads 定义了大约 60 个函数,允许程序创建、杀死和回收线程,与对等线程安全地共享数据,还可以通知对等线程系统状态的变化。

这个实例演示了如何使用 pthread_join() 函数来等待线程的完成。

当上面的代码被编译和执行时,它会产生下列结果:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-109602-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值