写了一段简单的多线程累加代码,本意是测试一下C++多线程通过互斥锁对临界区进行保护。代码符合预期,但是心血来潮测了一下,如果不加互斥锁结果会怎么样。发现循环比较小的情况下,不加锁依然正确,如果循环次数超过一定数量,结果就出错了。
这一段然我有几点思考:
1、初级程序员(没错,说的就是我),有一个通病就是当代码运行结果不符合预期的时候就会想当然的认为是不是计算机硬件或者操作系统环境有问题,当代码运行结果符合预期,通常会认那都是自己的功劳,而不会反着想;
2、随着计算机硬件性能的提高,底层编译器会从一定程度上屏蔽由于程序员人为因素导致的问题。比如以前做GPU CUDA开发,GPU性能比较差,那么对CUDA核函数访存的要求就比较高,比如要优化到多少内存大小以内才能进行合并访存,后来GPU硬件性能提高了,这些硬件自动处理了;
3、引申思考,我认为未来程序员的能力相对于以前的程序员会越来越弱,因为很多问题对应用层面开发的程序员给屏蔽了。就相当于现在很多车都是自动挡的,那么这些司机的水平相较于以前的手动挡司机来说是要更差的。而且现在很多车还配有高阶的自动驾驶辅助功能,包括自动泊车这些,如果这些成为标配,可能以后司机都不知道怎么倒车了。
4、现在很多项目要求用现代C++进行开发,那么会使用现代C++进行开发,会用C++的最新特性到底是一个程序员高水平的体现还是一个程序员水平低呢?一个会用剑的武林高手遇到一个有枪的菜鸟,你愿意成为谁?这是我的问题。