Shell脚本函数的定义和传参
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本函数的定义和传参相关的知识,希望对你有一定的参考价值。
参考技术Alinux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用。项目开发中利用 Shell 脚本可以很方便进行工程化,自动化操作。
说明:
输出结果:
输出结果:
输出结果:
注意: $10 不能获取 第十个 参数,获取第十个参数需要 $10 。当 n>=10 时,需要使用 $n 来获取参数。
输出结果:
欢迎访问: 个人博客地址
c++11 thread多线程创建和传参
参考技术A 这是操作系统的两个定义,进程好比一个任务,假设你要做一道菜,家里啥原料甚至盐都没有,于是就要买菜->买作料->做菜。这个任务就是可以理解为一个进程。你可以派一个人去买菜买盐回来再做菜,你也可以派两个人一个买盐一个买菜,这里的人好比线程。进程就是线程的容器。任何程序执行都会有一个主线程,在c++中就是主函数所在的线程,那么其他线程也需要一个函数去执行,不然其他线程鬼知道自己要干什么。
这里我创建了俩函数,分别打印两句话。
接下来就是创建线程,首先我们引入thread这个头文件,然后创建一个thread对象,构造函数参数为咱们的两个线程函数。我们用join()函数表示等待,咱们先试试效果。
最后我们需要定义主线程和这俩线程的关系,因为有时候主线程跑得快,那么主线程就结束了而这俩蜗牛还在搞,那么就会有一系列问题。一般建议让主线程等待这俩货搞完了在结束保证安全,当然也可以自己先跑路。
首先打印线程1开始,接下来本应该打印换行符的,结果让线程2开始抢了先。这是因为这俩线程相互没什么关系,谁快谁慢看电脑心情。最后所有线程退出,主线程就可以结束啦。
这次运行的是join,那么我试试主线程不等待这俩货,为了演示更加清晰,我删除了一个货,留下线程1,再把线程1要干的活加重一点。
打印了什么玩意儿,主线程结束先打,之后换行都没有就线程1开始,然后换了行(也不知道几行),然后啥也没了。为了看得更清楚,我加大了主函数的工作量。
咱不用细讲了,结果就是这样,如果线程先退出,大舅不打印了,但是不代表其他线程就不干活了,活还是在干的。
这里的detach()其实会有很多问题,那就是之后传参的问题,线程函数的参数在创建thread对象时一起传进去。
这里传递了俩参数,一个是int类型,另一个是string引用,还有一个就是指针。之前说过,如果我们用detach,主线程会被回收,那么这里的两个参数会不会被回收,如果回收了,次线程不就没有参数了吗,尤其是这里的string引用和指针。我们探究一下。我们先来一把join看看这两种变量的地址关系。分别打印三个对象的地址
三个变量,只有指所指的对象的地址是相同的。引用的地址居然不同,可见拷贝了,那么在进一步探究,我们自定义类,在拷贝构造函数里打印东西。
我们在三中构造函数里都打印东西,并且输出自定义类对象地址。
发现咱们使用引用是发生了拷贝,那么不用引用呢,其实会发生两次拷贝。如下图
会发现隐式转换是在子线程里干的活,那就危险了。
现在如果执意要使用引用,但是都不能复制,比如多个线程需要操作主线程里同一个对象,指针是一种形式,引用当然也可以,在std空间里,有个函数叫ref(),用它包起来的对象就是真引用,不会发生复制,形参里的const修饰符也可以不用了。
以上是关于Shell脚本函数的定义和传参的主要内容,如果未能解决你的问题,请参考以下文章