07 2011 档案

有关send(),recv()函数的理解
摘要:int send( SOCKET s, const char FAR *buf, int len, int flags );不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。这里只描述同步Socket的send函数的执行流程。当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲的 长度, 如果len大于s的 阅读全文

posted @ 2011-07-29 13:46 艾杏佛 阅读(8873) 评论(2) 推荐(0)

gdb调试多线程程序总结
摘要:先介绍一下GDB多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。 thread apply all command 让所有被调试线程执行GDB命令command。 set scheduler-locking 阅读全文

posted @ 2011-07-28 19:11 艾杏佛 阅读(2526) 评论(0) 推荐(1)

UNIX 编程中错误输出的线程安全问题(转载)
摘要:本文主要讲了使用errno,perror,strerr的一些函数进行错误输出管理的时候,在多线程的环境下有可能出现的混乱问题,并且针对线程安全,可重入和不可重入函数的关系进行了论述。出处:http://www.chineselinuxuniversity.net/articles/13685.shtml2008 年 6 月 26 日在多线程的 UNIX 应用程序中,系统调用出错时,错误输出有时可能不会像在单线程系统中那样正确的反应错误所在,因为需要考虑多线程情况下所使用的错误输出方式是否安全等问题。希望本文能对大家在多线程场景下选择错误报告的输出方式有所启发。 系统调用失败原因分析 在 UNI 阅读全文

posted @ 2011-07-21 13:34 艾杏佛 阅读(582) 评论(0) 推荐(0)

遵守多线程编程的常识
摘要:准则6: 遵守多线程编程的常识要准确把握在POSIX标准的函数中,那些函数是非线程安全的,一定不要使用要让自己编写的函数符合线程安全在访问共享数据/变量之前一定要先锁定如果使用C++的话,一定要注意函数的同步方法说明: (1) 要准确把握那些非线程安全的函数,一定不要使用如果在POSIX平台上进行多线程编程时,有几个最基本的知识,也就是所说的“常识”,希望大家一定要严格遵守。...首先、我们要理解“线程安全”的意思。线程安全的函数就是指,“一个能被在多个线程同时调用也不会发生问题的函数”。这样的函数通常要满足以下几个的特质。不要操作局部的静态变量(函数内的static变量)和全局静态数据(全局 阅读全文

posted @ 2011-07-13 19:57 艾杏佛 阅读(437) 评论(0) 推荐(0)

自己写 localtime 函数(含完整注释,代码)转载
摘要:localtime()在多线程中使用的少的时候是不会出错的现localtime和ctime等函数在linux中的返回值均存放在一个静态区中,即TLS变量。如果在多线程程序中比较频繁的调用此函数,则可能出现内容错乱的情况。//曾在某平台下多线程中使用localtime库函数。可恶的是,每当程序运行//一段时间后,都要出现内存泄露。查了数个夜晚为什么,无从断定。//只能狠狠心,自己写了个localtimes,功能与localtime库函数相同。//有了它以后,我就不再因内存泄露而烦恼了。//要知道“内存泄露”是程序员大的一大耻辱。//这个localtimes在多线程下已经运行了3年,还没发生问题, 阅读全文

posted @ 2011-07-13 19:55 艾杏佛 阅读(1482) 评论(0) 推荐(0)

导航