杂记
Four_Kings
这个作者很懒,什么都没留下…
展开
-
再次否定自己的认识(有关DCL)
从熟悉设计模式开始,就一直希望能看到线程安全的单件模式在C++中的完美实现,兼顾性能与安全。在MCD中强迫自己看完整整一章关于线程安全的单件模式实现方案,以为DCL可以做到,不用每次都lock,可是,事实证明C++中的DCL依然是有问题的。原理刚看明白,和CPU的乱序执行以及cache一致性有关,大家google一下就知道了(貌似C++还是有办法让DCL起作用,那就是使用memory ba原创 2010-01-21 10:15:00 · 486 阅读 · 0 评论 -
配置开发支持高并发TCP连接的Linux应用程序全攻略
<br />1、修改用户进程可打开文件数限制<br /><br /> 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:<br /> [speng@as4 ~]$ ulimit -n<br /> 1024<br转载 2010-10-08 13:41:00 · 698 阅读 · 0 评论 -
试用CMake,感觉不错
<br />总结一下,初学者可以先看看CMake Practice,已经有热心网友翻译成中文版了,还不错。另外可以参考下Apache的Qpid项目,里面也是用的cmake,很有参考意义。原创 2010-09-28 10:34:00 · 600 阅读 · 0 评论 -
VS2005自动关闭的解决方法
<br />我的X61距离上一次重装系统(XP SP3)已经一年了,VS2005也一直使用得好好的。今天心血来潮装了个IE8,重启后再打开项目,VS2005在load project进度条跑到最后的时候,自动关闭了,什么提示都没有。花了一个小时时间才解决这个问题。。。为了避免下次再浪费一小时,总结一下自己解决的方法以及在网上搜罗到的方法。<br /> <br />方法一,如果装了VMWare,把VMware Authorization Service、VMware DHCP Service、VMware N原创 2010-09-27 12:35:00 · 1980 阅读 · 0 评论 -
当出现大量timewait状态的连接时,该如何处理?
<br />1.当不在意丢失少量数据时,可以使用SO_LINGER。<br />2.windows下,修改注册表,将timewait的时间减少到一个恰当的值。linux下,修改内核里timewait的时间到一个恰当的值,重新编译内核。<br />3.linux下,修改以下两个参数<br />/proc/sys/net/ipv4/tcp_tw_reuse:此参数表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。<br />/proc/sys/net/ipv4/tcp_tw_rec原创 2010-09-06 13:52:00 · 1800 阅读 · 0 评论 -
关于10055错误
<br />在windows下做网络开发的,在测试或者产品正式运营时随时有可能碰到这个错误,错误信息是:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。<br />病根在错误信息里已经描述了(系统缓冲区空间不足或队列已满),那么怎么解决这个错误呢?总结下在网上搜索到,以及在朋友遇到这个问题时的解决方法。<br />1,netstat查看是否有大量处于timewait状态的连接,如果有,那么:a,参考SO_LINGER的使用,能避免timewait状态。b,如果对数据丢失很敏感,那么建议修改注册表中原创 2010-08-28 10:44:00 · 8027 阅读 · 1 评论 -
以下均“剽窃”自我的偶像猫哥的博客,仅用做笔记
<br />1.ACE5.7.8在vs2010正式版下不可用<br /><br />不解释了,下面的转的一段话说得比较清楚了。<br />It says that you can #define errno WSAGetLastError() and has the following example:<br />r = recv(...);<br />if (r == -1 /* (but see below) */<br /> && WSAGetLastError()转载 2010-08-21 10:07:00 · 838 阅读 · 0 评论 -
墨菲定律(Murphy's Law)
有可能出错的事情,一定会出错(Anything that can go wrong will go wrong)。所以,在日常开发中,如果发现有可能导致BUG或者感觉不太对(这个就靠经验了,有时候还是有点灵验的)的地方一定要趁早修正。不要因为目前还没有爆发就偷懒,因为问题迟早会凸显出来,这个懒始终是偷不掉的,甚至也许日后处理起来会麻烦许多倍。原创 2010-05-24 10:24:00 · 695 阅读 · 0 评论 -
分享一下我的G-reader
订阅的几个个人觉得价值比较高的中文邮件列表以及站点,个人博客下次再总结。 :) http://groups.google.com/group/dev4server/创建者大宝sodme在csdn也有博客,服务器开发方面很不错的邮件列表,很多讨论都比较有深度 http://groups.google.com/group/pongba/创建者pongda在csdn应该也是名人了原创 2009-12-07 15:13:00 · 867 阅读 · 0 评论 -
Heap Corruption detected
出现此种情况,应该是堆栈溢出,一般是分配一个数组空间,在采用下标赋值的时候,下标越界导致的,在delete []的时候,会报错。举个简单的例子char* a = new char[2];a[0] = 1;a[1] = 2;a[2] = 3;delete []a;这个例子只能说明原理,总之,出现此种错误,应该仔细分析下标操作是否正确,或者memcpy中,源类型原创 2009-12-03 19:35:00 · 810 阅读 · 0 评论 -
有关delete this
使用delete this的场合:对象是从第三方库中通过工厂生成,比如MFC、COM、ACE等,提供类似destroy的接口,客户程序员只能使用destroy来销毁对象,而不应该直接delete对象指针。state模式中,状态对象生成依赖其自身的next_state对象后,主动请求销毁自身,可以使用delete this。简单的说,这一手法就是在对象不是显式new出来的,并且在需要请求原创 2009-12-03 19:42:00 · 643 阅读 · 0 评论 -
一段代码。。。
#include #include #include using namespace std;static const int DEFAULT_NUMBER = 10;static const int DEFAULT_VALUE = 0;vector obj(10,0);ACE_THR_FUNC_RETURN func(void* param){ int index = *(int*)param; for(int i = 0 ; i {原创 2010-10-24 19:55:00 · 684 阅读 · 0 评论