Linux系统编程
文章平均质量分 66
gqtcgq
这个作者很懒,什么都没留下…
展开
-
LInux下编译发生的libc相关错误
在某主机上编译程序,发生有找不到libc的问题,自己写了个简单的hello world程序,编译也失败,报错如下:# gcc -o 1 1.c/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../libc.so when searching for -lc/usr/bin原创 2015-07-06 17:23:29 · 7867 阅读 · 0 评论 -
互斥锁和内存可见性
一:引言 POSIX线程遵循一种共享状态的并发模型。在这种模型中,若干线程同时访问共享对象时,需要在线程间有合适的协调机制。特别是,需要以下特性来简化这种模型中的编程: 原子性访问:当某个线程正在修改共享对象时,需要避免另一个线程访问它; 内存可见性:一旦某个线程修改了共享对象,我们希望当修改发生后,在另一个线程中就能立即得到最新的状态。翻译 2016-08-26 17:04:34 · 3641 阅读 · 0 评论 -
条件变量用例--解锁与signal的顺序问题
我们知道,当调用signal/broadcast唤醒等待条件变量的其他线程时,既可以在加锁的情况下调用signal/broadcast,也可以在解锁的情况下调用。 那么,到底哪种情况更好呢?man手册中其实已经给出了答案: The pthread_cond_broadcast() or pthread_cond_signal() functions may翻译 2016-08-24 16:35:37 · 5356 阅读 · 1 评论 -
服务端编程中多线程的应用
本文是陈硕的《Linux多线程服务端编程 使用muduo C++网络库》一书中,第三章的读书笔记。其中暗红颜色的文字是自己的理解,鲜红颜色的文字表示原书中需要注意的地方。 一:进程和线程 每个进程有自己独立的地址空间。“在同一个进程”还是“不在同一个进程”是系统功能划分的重要决策点。《Erlang程序设计》[ERL]把进程比喻为人: 每个人有自己的原创 2016-08-11 18:52:46 · 4739 阅读 · 0 评论 -
负载均衡之加权轮询算法
在介绍加权轮询算法(WeightedRound-Robin)之前,首先介绍一下轮询算法(Round-Robin)。 一:轮询算法(Round-Robin) 轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。 算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。原创 2016-07-31 09:30:10 · 41377 阅读 · 6 评论 -
负载均衡的那些算法们
负载均衡的那些算法们by:简单的老王 上周发了问卷,想了解一下大家对老王有没有什么建议,然后好多朋友都投了票,想了解编程技术和服务器架构的干货,所以接下来会先聊聊编程和架构相关的算法,然后大概在6月下旬会跟大家聊聊面试那些事儿(老王到目前大约参加了几百次的面试,可以从面试官的角度来聊聊不一样的面试)。老王聊技术有个特点,就是绝不假大空,只求贴地飞行。所以,聊的东西一定会跟实际有关联转载 2016-07-31 09:20:47 · 1006 阅读 · 0 评论 -
进程保活方法
mysql-proxy源码中,使用了一种进程保活的方法。这种方法的基本原理是:当父进程完成基本的初始化后,创建子进程,由子进程继续后面的主体逻辑。而父进程wait子进程的退出状态。一旦发现子进程是由于收到信号而退出的,则重启子进程。 这种方法的实现代码如下:#include #include #include #include #include #include #原创 2016-07-23 08:20:25 · 1791 阅读 · 0 评论 -
Libev源码分析08:Libev中的内存扩容方法
在Libev中,如果某种结构的数组需要扩容,它使用array_needsize宏进行处理,比如:array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2); 这就表示要将整型(int)数组fdchanges,由原来的fdchangemax个元素扩容为fdchangecnt,新扩容的内存空间使用EMPTR原创 2015-11-15 09:51:39 · 995 阅读 · 0 评论 -
是readdir,还是readdir_r
readdir的原型如下:struct dirent *readdir(DIR *dirp); 因为内部使用了静态数据,所以readdir被认为不是线程安全的函数,POSIX[i]标准这样描述: The application shall not modify the structure to which the return value of read原创 2015-12-19 18:01:30 · 8133 阅读 · 0 评论 -
Error While Loading Shared Libraries, Cannot Open Shared Object File
In the “I wish the Internet had anactual correct answer” category comes a question from a Windows colleaguetrying to build software on Linux. He asks “I’m trying to do some web performancetesting and转载 2015-11-12 22:20:11 · 1229 阅读 · 0 评论 -
通过GDB重新获得进程的输出
有时通过SecureCRT或者Putty远程ssh到主机上执行某个进程,因长时间没有交互导致ssh断链,此时该进程由init进程收留。该进程的输出也就无法获得了。 这种情况下,可以利用gdb重新获得该进程的标准输出,方法如下: 1:获得程序的进程号(PID),以某个python进程为例:# ps –ef|grep python……root 2原创 2015-08-31 21:39:08 · 1404 阅读 · 0 评论 -
内存分配与处理函数
一:内存分配与释放 1:man手册#include void *calloc(size_t nmemb, size_t size);void *malloc(size_t size);void free(void *ptr);void *realloc(void *ptr, size_t size); malloc申请size个字节的空间,并返回内原创 2015-08-30 11:33:23 · 1033 阅读 · 0 评论 -
gcc需找头文件路径
`gcc -print-prog-name=cc1plus` -vThis command asks gcc which C++ preprocessor it is using, and then asks that preprocessor where it looks for includes.You will get a reliable answer for your s转载 2015-06-01 17:29:21 · 679 阅读 · 0 评论 -
编译时混合使用动态库和静态库
编译某个原创 2017-07-07 21:18:00 · 3194 阅读 · 0 评论