stpeace的专栏

接纳自己,提升认知,拥抱不确定性。

排序:
默认
按更新时间
按访问量

多线程操作C++ STL vector出现概率coredump问题分析------切勿对STL 容器的线程安全性有不切实际的依赖!

       多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump.        前段时间, 遇到一个多线程操作了全局的vector的问题,  程序崩了。场景是这样的:某全局配置参数保存在一个vector中,需要定时更新(更新线程), 另外的工作线程去读取配...

2018-07-27 21:48:03

阅读数:909

评论数:0

理解CAS与__sync_bool_compare_and_swap

      CAS是compare and swap,   简单来说就是,在写入新值之前, 读出旧值, 当且仅当旧值与存储中的当前值一致时,才把新值写入存储。__sync_bool_compare_and_swap是可供程序员调用的接口, 为什么需要CAS呢? 一起来看下:        让10...

2018-07-21 23:29:43

阅读数:1021

评论数:0

很多人居然以为select/poll/epoll是用来实现后台服务并发的?

     网上资料,很多都是以讹传讹,到处复制粘贴,不可尽信。 我们需要有自己的判断。          来说说后台服务模型:      1.  迭代服务器        简单说,就是在while中循环accept, 然后处理。显然, 这种服务是没有并发功能的, 后一个请求必须等前一个请求...

2018-07-07 15:02:26

阅读数:1389

评论数:2

线程堆栈过小引起内存溢出, 进而导致core dump

       之前在某微线程服务中遇到过一次, 线程堆栈设置过小, 导致程序崩溃(core dump),  通过加大线程堆栈的大小的设置解决了问题。 最近又碰到, 简单来看下:      #include <stdio.h> #include &...

2018-03-15 23:44:48

阅读数:2011

评论数:0

Linux线程的分离(detached)与结合(joinable)

       转载地址:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm线程的分离与结合  在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源...

2018-03-15 23:29:39

阅读数:1963

评论数:0

用valgrind调试pthread_create引起的内存泄漏------顺便熟悉下线程的joinable和detached属性

       valgrind的安装和调试很简单, 之前博文多次介绍(如果是ubuntu, 直接apt安装更简单, 一条命令搞定)。 最近遇到一个让人颇为难解的内存泄漏问题, 下面我们来抽取核心逻辑, 简单来说下:       先看看这段程序:#include <stdio....

2018-03-15 23:19:40

阅读数:2014

评论数:0

线程其实很简单

当年在某公司实习的时候, 涉及到多线程的概念(实际上就是主线程和网络线程), 小师傅问我, 懂不懂线程的概念, 我说不懂, 也确实不懂。        后来要找工作了, 再不懂就不好了, 所以跟大家一起看书, 书上说: 进程是正在运行的程序, 一个进程可以多多少线程。 擦, 无用的废话。 反正我...

2017-07-30 15:01:59

阅读数:4470

评论数:0

linux fork多进程并发服务器模型之C/C++代码实战

在很早的文章中, 我们一起聊过服务器如何与多个客户端进行通信, 那时, 我们要么用select, 要么用多线程, 却没有用多进程。 其实, 多进程也可以实现与多个客户端进行通信。 如果是在while中循环accept, 然后循环处理事情, 此时, 这种服务是迭代服务, 只能逐一...

2017-07-23 20:16:13

阅读数:4669

评论数:6

僵尸进程示例分析------顺便说说linux中的wait和waitpid

在之前的博文中, 我们说过孤儿进程, 在unix/linux中, 如果子进程活着, 而父进程死亡, 那么子进程就是孤儿进程, 很形象吧。          今天我们说说僵尸进程, 在unix/linux中, 如果父进程还活着, 但子进程死了, 那么unix/linux不会轻易地让子进程消息得一...

2017-07-23 19:44:54

阅读数:4341

评论数:0

玩转消息队列之C/C++代码

在以前的文章中, 我们说过消息队列, 那时的消息队列是用户空间的消息队列, 用于线程间的通信和同步。 今天, 我们来介绍下unix/linux下的消息队列, 是系统层面的, 主要用于进程间的通信。          之前我们也说过用共享内存来实现进程间的通信, 但共享内存没法保证进程同步, 必须业...

2017-07-09 19:47:21

阅读数:4339

评论数:0

共享内存linux C/C++代码实战------顺便玩下ipcs, ipcrm, shmget, shmat, shmdt, shmctl

在学校的时候, 谁会搞共享内存这些东西呢? 不过是为了笔试和面试, 大家才搞一下吧。 但是, 在实际工作中, 共享内存确实应用较广。        其实, 共享内存的思想很简单, 我来举个俗气的例子, writer进程和和reader进程通信, 最简单的方式是什么: 当然是共享文件啊。 write...

2017-07-08 15:56:55

阅读数:5324

评论数:0

孤儿进程示例分析

父进程创建子进程后, 父进程先挂了, 于是子进程成了孤儿进程, 被新的init进程所领养。         来看代码: #include #include int main() { int pid = 0; pid = fork(); if(pid < 0) { ...

2017-06-27 07:55:37

阅读数:4338

评论数:3

如何让你的linux程序在后台静默执行?

最近写了个工具, 需要在后台静默执行, 即使关闭了当前linux命令行窗口, 也不会有影响, 我们来戏说。 1. 写main.cpp, 生成可执行的二进制文件main (要注意权限, 确保可执行) 2. 写脚本run.sh (要注意权限, 确保可执行)

2016-12-24 08:54:59

阅读数:9634

评论数:0

来来来, 出个题考一下你的计算机功底------程序中有某一个变量, 为什么在同一时刻有不同的值?

来来来, 出个题考一下你的计算机功底------程序中有某一个变量, 为什么在同一时刻有不同的值?         这个问题, 我在两年前碰到过, 之前在博客里面也说过。 当时, 我感到非常非常纳闷! 学电子的, 搞计算机就是伤不起啊         其实, 很简单, 多进程加载同一动...

2016-12-11 09:11:18

阅读数:4735

评论数:2

父线程用标志变量控制子线程的范例

在实际开发中, 我们会碰到太多需要开线程的例子, 通常会让子线程异步地处理一些信息。 一旦某些情况发生后, 我们需要在父线程中让子线程终止, 那则么办呢? 一个自然而言的想法是用标志变量控制        通用范例如下: #include #include #define YES 0 #de...

2015-05-28 23:35:14

阅读数:5065

评论数:2

线程1: i++; i++; 线程2: i+=2; 的问题 (2013年某公司笔试题目)

题目: 全局的int i = 0; 线程1: i++; i++; 线程2: i+=2;

2015-05-20 22:52:49

阅读数:5793

评论数:6

“进程球”通过数据库来通信------好美的一幅图!

拿着一支笔, 随便画画, 然后在纸上画了三个球, 哦, 这不就是一个个的进程么? 本来想上传亲笔画的图, 但晚上拍照效果不太好, 所以还是用鼠标来画吧。  先睹为快:                    图还是挺好看的          下面, 我们来闲聊一下这幅图的一些东东。 ...

2015-05-16 01:06:02

阅读数:5296

评论数:4

用Wireshark抓包来揭开ftp client GG和ftp server MM的勾搭内容并用C代码来简要模拟实现Windows自带的ftp client

前面, 我们玩过http, 颇有点意思, 在本文中, 我们继续来玩ftp(file transfer protocol).   http和ftp都是建立在tcp之上的应用层协议, 无论他们怎么包装, 怎么装bigger, 最终还是基于tcp端到端传输的。本文主要分为两个部分: 一. 用Wiresh...

2015-04-17 20:48:22

阅读数:13373

评论数:2

心跳机制tcp keepalive的讨论、应用及“断网”、"断电"检测的C代码实现(Windows环境下)

说明: 1. 本文的讨论和实验都以Windows为例, 其实在linux上也大同小异。 2. 在第一次写此博文时, 我对某些地方有一些误解, 现予以更正, 对文章结构做了较大调整,也欢迎大家提出质疑。 3. 在做实验玩代码的时...

2015-04-13 22:38:45

阅读数:13643

评论数:28

Windows下利用C语言程序设置环境变量---能否用环境变量实现进程间的通信?

先看什么是环境变量吧, 在Windows的cmd中, 我们输入一下set命令, 得到: C:\Documents and Settings\Administrator>set ALLUSERSPROFILE=C:\Documents and Settings\All Users APPDAT...

2015-03-27 23:57:47

阅读数:7215

评论数:2

提示
确定要删除当前文章?
取消 删除
关闭
关闭