Linux+c+线程的属性,C ++中的多线程

多线程是多任务的一种特殊形式,多任务是一种功能,它使您的计算机可以同时运行两个或多个程序。通常,多任务有两种类型:基于进程和基于线程。

基于进程的多任务处理程序的并发执行。基于线程的多任务处理并发执行同一程序的各个部分。

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

C ++不包含对多线程应用程序的任何内置支持。相反,它完全依赖于操作系统来提供此功能。

本教程假定您正在Linux OS上工作,并且我们将使用POSIX编写多线程C ++程序。POSIX线程或Pthread提供了许多类似Unix的POSIX系统(例如FreeBSD,NetBSD,GNU / Linux,Mac OS X和Solaris)上可用的API。

以下例程用于创建POSIX线程-#include 

pthread_create (thread, attr, start_routine, arg)

在这里,pthread_create创建一个新线程并使其可执行。可以在代码中的任何位置多次调用此例程。这是参数的说明。参数描述线子例程返回的新线程的不透明唯一标识符。

属性一个不透明的属性对象,可用于设置线程属性。您可以指定线程属性对象,或将NULL指定为默认值。

start_routine创建线程后将执行的C ++例程

精氨酸可以传递给start_routine的单个参数。它必须通过引用作为void类型的指针转换传递。如果不传递任何参数,则可以使用NULL。

进程可以创建的最大线程数取决于实现。一旦创建,线程就是对等的,并且可以创建其他线程。线程之间没有隐含的层次结构或依赖性。

终止线程

我们使用以下例程来终止POSIX线程–#include 

pthread_exit (status)

在这里,pthread_exit用于显式退出线程。通常,pthread_exit()例程在线程完成其工作之后被调用,并且不再需要存在。

如果main()在创建线程之前完成,并以pthread_exit()退出,则其他线程将继续执行。否则,它们将在main()完成时自动终止。

示例#include 

#include 

#include 

using namespace std;

#define NUM_THREADS 5

void *PrintHello(void *threadid) {

long tid;

tid = (long)threadid;

cout <

pthread_exit(NULL);

}

int main () {

pthread_t threads[NUM_THREADS];

int rc;

int i;

for( i = 0; i 

cout <

rc = pthread_create(&threads[i], NULL, PrintHello, (void *)i);

if (rc) {

cout <

exit(-1);

}

}

pthread_exit(NULL);

}

输出结果$gcc test.cpp -lpthread

$./a.out

main() : creating thread, 0

main() : creating thread, 1

main() : creating thread, 2

main() : creating thread, 3

main() : creating thread, 4

Hello World! Thread ID, 0

Hello World! Thread ID, 1

Hello World! Thread ID, 2

Hello World! Thread ID, 3

Hello World! Thread ID, 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux shell 除法运算符,Linux shell 基本运算符详解

shell 支持多种运算符1.算数运算符2.关系运算符3.布尔运算符4.字符串运算符5.文件测试运算符原生bash不支持简单的数学运算&#xff0c;但是可以通过其他命令来实现&#xff0c;例如 awk 和 expr&#xff0c;expr 最常用。expr 是一款表达式计算工具&#xff0c;使用它能完成表…

linux下如何为redis配置path,linux环境下如何启动redis

启动redisredis可执行文件说明&#xff1a;redis-server&#xff1a;redis服务器redis-cli&#xff1a;redis命令行客户端redis-benchmark&#xff1a;redis性能测试工具redis-check-aof&#xff1a;aof文件修复工具redis-check-dump&#xff1a;rdb文件检查工具1、直接启动直接…

linux从别的主机下载,从局域网内的其他Linux主机下载文件

Step 0本机与目标机都需要安装有openssh-server在本机与目标机上以root用户身份执行service ssh status # Debian上是ssh&#xff0c;openSUSE上是sshd&#xff0c;可以在键入ssh后紧接着按一下Tab键以自动补全该服务名# 或service --status-all | grep ssh # 通用可查看ssh服务…

linux runqueue定义,linux – 了解rt_rq(实时runqueue)内核中数据成员的使用

以下是v3.5.4中的实时运行队列结构struct rt_rq {struct rt_prio_array active;unsigned int rt_nr_running;#if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHEDstruct {int curr; /* highest queued rt task prio */#ifdef CONFIG_SMPint next; /* next highest */#end…

Linux7安装gi报错,Redhat 7.6安装11G RAC GI时遇到此类报错

环境&#xff1a;Redhat Linux 7.6 Oracle 11.2.0.4 RAC现象&#xff1a;图像化安装过程中&#xff0c;按照提示执行root.sh脚本&#xff0c;报错中断。1. 具体现象[rootmm1903 ~]# /u01/app/11.2.0/grid/root.shPerforming rootuser operation forOracle 11gThe following en…

c语言修改字符串c2133,通过create_string_buffer、create_unicode_buffer让C语言具备修改字符串的能力...

字符串的修改我们知道C中不存在字符串这个概念&#xff0c;python中的字符串在C中也是通过字符数组来实现的。我们说在C中创建一个字符数组有两种方式&#xff1a;char *s1 "hello world";char s2[] "hello world";这两种方式虽然打印的结果是一样的&…

c语言中O空字符,OC语言中字符串的使用

可变字符串//插入字符串NSMutableString*string1 [NSMutableStringstringWithString:"字符串"];[string1insertString:"可变"atIndex:0];//在string的第0个位置插入NSLog("string %",string1);//可变字符串//删除字符串NSMutableString*string2…

大二c语言期末考试题库及详解答案,大学C语言期末考试练习题(带详解答案)...

《大学C语言期末考试练习题(带详解答案)》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《大学C语言期末考试练习题(带详解答案)(55页珍藏版)》请在金锄头文库上搜索。1、一、 单项选择题1( A )是构成C语言程序的基本单位。A、函数 B、过程 C、子程序 D、子例程2C语言…

C语言指针怎么存二维数组,C语言怎么用指针代替二维数组

1.设p是指向二维数组a[m][n]的指针变量&#xff0c;则有&#xff1a;int*pa[0];//此时P是指向一维数组的指针。P后&#xff0c;p指向a[0][1]。2.如果定义int(*p1)[n];p1a;p1后&#xff0c;p1指向a[1][0];则pj将指向a[0]数组中的元素a[0][j]。由于a[0]、a[1]┅a[M-1]等各个行数组…

c语言结构引用6,C语言6结构体练习题6

第六章 结构体1&#xff0e;下面对结构变量的叙述中错误的是A&#xff0e;相同类型的结构变量间可以相互赋值 B&#xff0e;通过结构变量&#xff0c;可以任意引用它的成员 C&#xff0e;结构变量中某个成员与这个成员类型相同的简单变量间可相互赋值D&#xff0e;结构变量与简…

设 l í {a,b,c}* 是满足下述条件的符号串构成的语言,编译原理模拟试题1和2的答案...

一、是非题1、算符优先关系表不一定存在对应的优先函数。( 错)2、数组元素的地址计算与数组的存储方式有关。( 错)3、仅考虑一个基本块&#xff0c;不能确定一个赋值是否真是无用的。( 正确)4、每个文法都能改写为LL(1)文法。( 正确)。5、对于数据空间的存贮分配&#xff0c;FO…

新手学习c语言的方法,学习C语言方法“新手必看”

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼&#xff11;、多看代码在有一定基础以后一定要多看别人的代码。 注意代码中的算法和数据结构。 毕竟学C之后的关口就是算法和数据结构。提到数据结构&#xff0c;指针是其中重要的一环&#xff0c;绝大多数的数据结构是建立在指针…

android自定义进度条百分比跟着走,Android自定义View实现水平带数字百分比进度条...

这个进度条可以反映真实进度&#xff0c;并且完成百分比的文字时随着进度增加而移动的&#xff0c;所在位置也恰好是真实完成的百分比位置&#xff0c;效果如下&#xff1a;思路如下&#xff1a;第一部分是左侧的蓝色直线&#xff0c;代表已经完成的进度&#xff1b;第二部分是…

android动画view上移,在Android开发中使用View制作一个引导动画

在Android开发中使用View制作一个引导动画发布时间&#xff1a;2020-11-20 16:46:16来源&#xff1a;亿速云阅读&#xff1a;98作者&#xff1a;Leah这篇文章将为大家详细讲解有关在Android开发中使用View制作一个引导动画&#xff0c;文章内容质量较高&#xff0c;因此小编分享…

linux 启动 x,(1)linux启动过程

head.S是linux启动后的第一个文件&#xff0c;主要完成以下功能&#xff1a;1、检查处理器信息&#xff0c;并保存&#xff1b;2、检查平台号&#xff0c;并保存&#xff1b;3、创建页表&#xff0c;并开启MMU功能&#xff1b;4、对内核data section、bbs section作调整和初始化…

android 刷新view位置,Android View刷新机制实例分析

本文实例讲述了Android View刷新机制。分享给大家供大家参考&#xff0c;具体如下&#xff1a;一、总体说明在Android的布局体系中&#xff0c;父View负责刷新、布局显示子View&#xff1b;而当子View需要刷新时&#xff0c;则是通知父View来完成。二、代码分析1).ViewGroup的a…

android 滚动到底部,Android 控制ScrollView滚动到底部(示例代码)

在开发中&#xff0c;我们经常需要更新列表&#xff0c;并将列表拉倒最底部&#xff0c;比如发表微博&#xff0c;聊天界面等等,这里有两种办法,第一种&#xff0c;使用scrollTo():public static void scrollToBottom(final View scroll, final View inner) {Handler mHandler …

html整体引入js,html页面用js引入js的方式

最原始的是用script便签&#xff1a;1. 使用js打印这个便签&#xff1a;当然这也可以动态引入css以及其他html元素。2. 使用dom的api添加script元素&#xff1a;jQuery中封装了这种方式&#xff0c;并贴心的加入了回调&#xff1a;$.getScript(url,callback(res, status));简单…

vivo android p 机型,vivo X21成全球首批Android P适配机型!vivo :不小心就秀实力了

原标题&#xff1a;vivo X21成全球首批Android P适配机型&#xff01;vivo :不小心就秀实力了近日&#xff0c;2018谷歌I/O大会正式召开&#xff0c;会上发布了大家期待已久的Android P开发者预览版&#xff0c;给我们展示了众多全新特性&#xff0c;其中AI功能的进化让人十分眼…

android继承父类的界面,Android调用父类方法,进行子界面刷新

偶然遇到一个需求、有几个主界面需要获取消息的未读数量由于不是所有类都调用、调用的次数又比较多&#xff0c;整的不上不下的1、对于方法调用次数比较少的 推荐广播广播的方法很方便、但是一堆的消息接收、发送很模式化2、对于较多的方法调用 个人建议直接写共用类中此方法通…