0%
C++重载运算符>>和<<
概述
要重载一个运算符,有两种方式:
- 作为成员方法,只需要一个参数。
- 作为全局函数,需要两个参数。
而cin
和cout
这两个对象我们无法对其内部成员进行修改,因此对cin
和cout
的重载只能使用第二种办法。
mutex实现
参考
理论上讲,mutex可用初始值=1的信号量表示,只需一个整数表示其状态:0表示未占用,1表示占用。那么,mutex的资源占用就只是一个int型了?
usleep和yield
yield()放弃的是一次时间片,下一次调度还是可以正常运行的,对当前线程的性能影响比较小一点。因此性能敏感的代码可以使用yield()。
usleep()放弃的是一段时间,当前线程可能在N个时间片之内都不会被调用运行,对当前线程的性能影响比较大一点。性能不敏感的代码可以使用usleep()系列函数。一般使用sleep()系列函数都是想在没事做的时候主动降低线程CPU占用率。
另外可能有一些低级OS实现sleep()系列函数时内部采用自旋锁实现,当前线程并没有放弃消耗CPU时间片,而是一直把时间浪费在进行各种条件判断工作的事情上。
socket编程示例
本次使用的环境为Ubuntu 16.04。如果是linux操作系统能够运行本示例代码,如果是Windows操作系统,那么本篇文章不适用。
什么是socket
socket
是应用层和传输层之间的API接口,通过socket为本地进程和远端进程提供通信服务,如TCP、UDP,是面向client-server架构的。需要注意的是,socket也能够实现与网络层的连接,不过用得很少,这里示意图不再标出。