03 2012 档案
摘要:智能指针:它的一种通用实现方法是采用引用计数的方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。 每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;这是因此左侧的指针指向了右侧指针所指向的对象,因此右指针所指向的对象的引用计数+1;调用析构函数时,构造函数减少引用计数(如果引用计数减至0,则删除基础对象)。实现智能指针有两种经典策略:一...
阅读全文
摘要:主要有三种方案:(1)调用Alarm,它在指定超时期满时产生SIGALRM信号,此方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的ALARM调用。(2)在SELECT,即多路复用中阻塞等待IO,因为select有内置的时间限制,以此代替直接阻塞在read或write上的调用。(3)使用较新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项,这个方法的问题在于并非所有的实现都支持这两个套接字选项。一、首先看一个如何调用Alarm,它主要是通过对慢系统调用产生中断信号来完成。int connect_timeo(int sockfd, const SA *sapt
阅读全文
摘要:先描述一下整体的流程及思路: 客户端从标准输入读取一行文本,发送给服务器,服务器收到文本后,将文本直接返回给客户端,即回显。整体采用TCP协议完成。 客户端大致代码:socket,connect函数略去char sendline[1024],recvline[1024];while( fgets(sendline, 1024, stdin) != NULL){ //从标准输入读取 writen(sockfd,sendline,strlen(sendline)); //发送给服务器,Sockfd就是与服务器联通的Socket if(readline(sockfd, recvlin...
阅读全文
摘要:为允许在线程或进程间共享数据,同步通常是必须的。常见的同步方式有:互斥锁、条件变量、读写锁、信号量。另外,对于进程间的同步,也可以通过进程间通信的方式进行同步,包括管道(无名管道、有名管道)、信号量、消息队列、共享内存、远程过程调用,当然也可以通过Socket来进行网络控制。一. 互斥锁和条件变量是同步的基本组成部分 互斥锁和条件变量出自Posix.1线程标准,多用来同步一个进程中各个线程。但如果将二者存放在多个进程间共享的内存区中,它们也可以用来进行进程间的同步。1. 互斥锁用于保护临界区,以保护任何时刻只有一个线程在执行其中的代码,其大体轮廓大体如下: lock_the_mutex...
阅读全文