当前位置:  编程技术>综合
本页文章导读:
    ▪Linux 多线程编程的问题(转)       1 重入问题 传统的UNIX没有太多考虑线程问题,库函数里过多使用了全局和静态数据,导致严重的线程重入问题。 1.1 –D_REENTRANT /-pthread和errno的重入问题。 所先UNIX的系统调用被.........
    ▪单例Bean      代码: public class Singleton { //私有化构造器 private Singleton(){ } //单例缓存者,惰性初始化,第一次使用时初始化 private static class InstanceHolder { private static final Singleton INSTANCE = new Singleton(); }.........
    ▪gcc简单使用      格式:    gcc [option]  [filename] -c 只编译生成.o文件 -o output_filename -O 优化程序 -O2 优化程度更深 -g 产生代码调试信息 -Wall  所有警告 -w 不产生任何警告 -DMACRO  相当于#def.........

[1]Linux 多线程编程的问题(转)
    来源: 互联网  发布时间: 2013-11-10

1 重入问题

传统的UNIX没有太多考虑线程问题,库函数里过多使用了全局和静态数据,导致严重的线程重入问题。

1.1 –D_REENTRANT /-pthread和errno的重入问题。

所先UNIX的系统调用被设计为出错返回-1,把错误码放在errno中(更简单而直 接的方法应该是程序直接返回错误码,或者通过几个参数指针来返回)。由于线程 共享所有的数据区,而errno是一个全局的变量,这里产生了最糟糕的线程重入问 题。比如:

do {

bytes = recv(netfd, recvbuf, buflen, 0);

} while (bytes != -1 && errno != EINTR);

在上面的处理recv被信号打断的程序里。如果这时连接被关闭,此时errno应该不 等于EINTR,如果别的线程正好设置errno为EINTR,这时程序就可能进入死循环。 其它的错误码处理也可能进入不可预测的分支。

在线程需求刚开始时,很多方面技术和标准(TLS)还不够成熟,所以在 为 了 解决这个重入问题引入了一个解决方案,把errno定义为一个宏:

extern int *__errno_location (void);

#define errno (*__errno_location())

在上面的方案里,访问errno之前先调用__errno_location()函数,线程库提供这个 函数,不同线程返回各自errno的地址,从而解决这个重入问题。在编译时加 -D_REENTRANT就是启用上面的宏,避免errno重入。另外 -D_REENTRANT 还影响一些stdio的函数。在较高版本的gcc

    
[2]单例Bean
    来源: 互联网  发布时间: 2013-11-10

代码:

public class Singleton {
	//私有化构造器
	private Singleton(){
	}
	//单例缓存者,惰性初始化,第一次使用时初始化
	private static class InstanceHolder
	{
		private static final Singleton INSTANCE = new Singleton();
	}
	//提供全局访问点
	public static Singleton getInstance(){
		return InstanceHolder.INSTANCE;
	}
	//提供一个计数器来验证一个ClassLoader一个实例
	private int counter=0;
}

首先私有化构造器,其次使用InstanceHolder静态内部类持有单例对象,这样可以得到惰性初始化好处。最后提供全局访问点getInstance.使得需要该单例实例的对象能够获取到。

作者:howlaa 发表于2013-1-9 13:05:41 原文链接
阅读:0 评论:0 查看评论

    
[3]gcc简单使用
    来源: 互联网  发布时间: 2013-11-10

格式:    gcc [option]  [filename]

-c 只编译生成.o文件

-o output_filename

-O 优化程序

-O2 优化程度更深

-g 产生代码调试信息

-Wall  所有警告

-w 不产生任何警告

-DMACRO  相当于#define MACRO


-I  dirname    (大写的i)用" "的头文件若在当前目录没有,则到dirname中找

-L dirname  首先到dirname中寻找所需库文件(默认在预设路径找,如/usr/lib)

-lname        在连接时装载名字为"libname.a"的函数库

                   如:  -lm  表示连接系统的数学库libm.a, 所有与浮点运算相关的都必须用数学库!

-static     库分动态和静态,动态通常以.so为后缀,静态通常以.a为后缀

               静态库: 把用到的函数放在程序里,

               动态库: 在程序内留下标记,当程序执行是先载入这个库

               linux下进行连接的缺省操作是首先连接动态库


分段编译:

程序编译的流程:

  • 预处理:  展开宏,加入"#include "包含的内容,生成预编译文件 **.i
  • 汇编:      生成汇编源文件 **.s
  • 编译:     生成目标文件 **.o
  • 链接:     将目标代码链接成可执行文件(放到和合适的地方)
  • 相关选项:

    -E  预编译,生成**.i

    -S  汇编,   生成.s

    -c   编译,   生成.o



    作者:wslzq 发表于2013-1-9 13:04:00 原文链接
    阅读:0 评论:0 查看评论

        
    最新技术文章:
    ▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
    ▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
    ▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
    ▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
    ▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
    ▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
    ▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
    ▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
    ▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
    ▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
    ▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
    ▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
    ▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
    ▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
    ▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
    ▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
    ▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
    ▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
    ▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
    ▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
    ▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
    ▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
    ▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
    ▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
    ▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
    ▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
    ▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
    ▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置 iis7站长之家
    ▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
    ▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3